You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/docs/higher-order-components.md
+22-22
Original file line number
Diff line number
Diff line change
@@ -23,7 +23,7 @@ Bu dokümanda neden üst-seviye bileşenlerin kullanışlı olduğunu tartışı
23
23
24
24
>**Not**
25
25
>
26
-
>Daha önce uygulama genelindeki sorunlar için mixins'in kullanılmasını önermiştik. Fakat o zamandan beri fark ettik ki, mixins yarardan çok zarara yol açıyor. Mixins'ten neden uzaklaştığımız konusunda ve nasıl varolan bileşenlerinizi mixins'ten geçirebileceğiniz hakkında daha fazla bilgiye [buradan](/blog/2016/07/13/mixins-considered-harmful.html) ulaşabilirsiniz.
26
+
>Daha önce uygulama genelindeki sorunlar için mixin'lerin kullanılmasını önermiştik. Fakat o zamandan beri fark ettik ki, mixin'ler yarardan çok zarara yol açıyor. Mixin'lerden neden uzaklaştığımız konusunda ve nasıl varolan bileşenlerinizi mixin'lerden geçirebileceğiniz hakkında daha fazla bilgiye [buradan](/blog/2016/07/13/mixins-considered-harmful.html) ulaşabilirsiniz.
27
27
28
28
Bileşenler React’te yeniden kod kullanımının temel birimidir. Fakat, bazı davranışların alışılageldik bileşenlerle kullanılmaya uygun olmadığını göreceksiniz.
29
29
@@ -103,7 +103,7 @@ class BlogPost extends React.Component {
103
103
104
104
`CommentList` ve `BlogPost` birebir aynı değil - `DataSource`'da farklı methodlar çağırıyorlar ve farklı çıktılar renderlıyorlar. Fakat, kodlamasının çoğu aynı:
105
105
106
-
-Mount'da`DataSource`'a bir değişken dinleyici eklemek.
106
+
-Yükleme (mount) sırasında`DataSource`'a bir değişken dinleyici eklemek.
107
107
- Dinleyicinin içinde, data kaynağı değiştiğinde `setState`'i çağırmak
İlk parametre kaplanan bileşen. İkinci parametre is `DataSource` ve anlık proplar'ı aldığı zaman ilgilendiğimiz datayı çekiyor.
126
+
İlk parametre kaplanan bileşen. İkinci parametre is `DataSource` ve anlık propları aldığı zaman ilgilendiğimiz datayı çekiyor.
127
127
128
-
`CommentListWithSubscription` ve `BlogPostWithSubscription` render edildiğinde `CommentList` ve `BlogPost`'a bir `data`prop'u gelecek ve bu data'da `DataSource`'tan çekilen en gücel data bulunacak.
128
+
`CommentListWithSubscription` ve `BlogPostWithSubscription` render edildiğinde `CommentList` ve `BlogPost`'a bir `data`propu gelecek ve bu data'da `DataSource`'tan çekilen en gücel data bulunacak.
129
129
130
130
```js
131
131
// This function takes a component...
@@ -168,9 +168,9 @@ Bir HOC'un input bileşenini değiştirmediğini ve davranışı kopyalamak içi
168
168
169
169
İşte bu kadar! Kapsanan bileşen, kapsayan bileşenin bütün proplarını alır ayrıca output'unu render etmek için yeni bir prop olan `data`'yı alır. Data'nın neden veya nasıl kullanıldığı HOC'u ilgilendirmez ve kapsanan bileşen de data'nın nereden geldiğiyle ilgilenmez.
170
170
171
-
`withSubscription` normal bir fonksiyon olduğundan, istediğiniz kadar arguman ekleyebilirsiniz. Örneğin, `data` prop ismini değiştirilebilir yapmak isteyebilirsiniz, bu sayede HOC ve kapsanan bileşen birbirinden daha ayrık bir hale gelecektir. Ya da `shouldComponentUpdate`'i ayarlayan veya data kaynağını ayarlayan bir arguman alabilirsiniz. Bunların mümkün olmasının sebebi ise HOC'un bileşenin nasıl tanımlandığı üzerinde tam kontrole sahip olmasıdır.
171
+
`withSubscription` normal bir fonksiyon olduğundan, istediğiniz kadar arguman ekleyebilirsiniz. Örneğin, `data` prop ismini değiştirilebilir yapmak isteyebilirsiniz, bu sayede HOC ve kapsanan bileşen birbirinden daha ayrık bir hale gelecektir. Ya da `shouldComponentUpdate`'i veya data kaynağını ayarlayan bir arguman alabilirsiniz. Bunların mümkün olmasının sebebi ise HOC'un bileşenin nasıl tanımlandığı üzerinde tam kontrole sahip olmasıdır.
172
172
173
-
Bileşenlerde olduğu gibi, `withSubscription` ile kapsanan bileşen arasındaki bağlantı tamamen prop'lar üzerindendir. Bu da kapsanan bileşene aynı propları sağladıkları sürece bir HOC'u başka bir HOC'la değiştirmeyi kolaylaştırır. Eğer data almanıza yarayan kütüphaneleri kullanırsanız bu değişkenlik işinize yarayabilir.
173
+
Bileşenlerde olduğu gibi, `withSubscription` ile kapsanan bileşen arasındaki bağlantı tamamen proplar üzerindendir. Bu da kapsanan bileşene aynı propları sağladıkları sürece bir HOC'u başka bir HOC'la değiştirmeyi kolaylaştırır. Eğer data almanıza yarayan kütüphaneleri kullanırsanız bu değişkenlik işinize yarayabilir.
174
174
175
175
## Orijinal Bileşeni Değiştirmeyin. Composition Kullanın. {#dont-mutate-the-original-component-use-composition}
Bununla alakalı bir kaç problem var. Birincisi, girdi olarak kullanılan bileşen geliştirilmiş bileşenden ayrı olarak yeniden kullanılamaz. Daha önemlisi, `EnchancedComponent`'e başka bir HOC uygularsanız, o da `componentWillRecieveProps`'u değiştirecektir; ilk HOC’un fonksiyonalitesi kaybolacaktır. Ayrıca bu HOC, yaşam döngüsü methodları içermeyen fonksiyonel bileşenlerle çalışmayacaktır.
195
195
196
-
HOC’ları değiştirmek sıkıntılı bir abstraction yöntemidir— kodu kullanacak kişinin bunların nasıl kodlandığını bilmesi gerekiyor, yoksa diğer HOC’larla sıkıntı yaşayabilir.
196
+
HOC’ları değiştirmek sıkıntılı bir soyutlama yöntemidir— kodu kullanacak kişinin bunların nasıl kodlandığını bilmesi gerekiyor, yoksa diğer HOC’larla sıkıntı yaşayabilir.
197
197
198
-
HOC’ları değiştirmektense, HOC’lar composition kullanmalı. Bunu da girdi bileşeni başka bir bileşen içinde bulundurarak yapabilir.
198
+
HOC'lar, datayi degistirmek yerine girdi bileşenini bir kapsayıcı bileşene sararak bileşim (composition) yontemini kullanmalıdır.
199
199
200
200
```js
201
201
functionlogProps(WrappedComponent) {
@@ -212,15 +212,15 @@ function logProps(WrappedComponent) {
212
212
}
213
213
```
214
214
215
-
Bu HOC değiştirilmiş versiyonla aynı fonksiyonaliteye sahip ve bunu yaparken potansiyel sıkıntılardan da kaçınnıyor. Aynı zamanda hem class bileşenlerle hem fonksiyonel bileşenlerle aynı şekilde iyi çalışıyor. Ayrıca saf bir fonksiyon olduğu için kendisi de dahil diğer HOC’larla çalışabilir durumda.
215
+
Bu HOC degistiren versiyonla aynı islevsellige sahiptir ve bunu yaparken de potansiyel sıkıntılardan da kacinmaktadir. Aynı zamanda hem class bileşenlerle hem fonksiyonel bileşenlerle aynı şekilde iyi çalışıyor. Ayrıca saf bir fonksiyon olduğu için kendisi de dahil diğer HOC’larla çalışabilir durumda.
216
216
217
-
HOC’ların ve **container components** adlı bir teknik arasında bir kaç benzerlik fark etmiş olabilirsiniz. Container components üst ve alt seviyeyle alakalı sorumluluğu birbirinden ayrımaya yarayan bir stratejidir. Container’lar olayları dinlemek, state ve propların bileşenler arasında yollanması gibi UI’yla alakalı olaylarla ilgilenirler. HOC’lar ise container’ları kendilerini hayata geçirmekte kullanırlar. HOC’ları, parametrize edilmiş bileşen tanımları gibi düşünebilirsiniz.
217
+
HOC’ların ve **kapsayıcı bileşenler (container components)** adlı bir teknik arasında bir kaç benzerlik fark etmiş olabilirsiniz. Kapsayıcı bileşenler üst ve alt seviyeyle alakalı sorumluluğu birbirinden ayrımaya yarayan bir stratejidir. Container’lar olayları dinlemek, state ve propların bileşenler arasında yollanması gibi UI’yla alakalı olaylarla ilgilenirler. HOC’lar ise container’ları kendilerini hayata geçirmekte kullanırlar. HOC’ları, parametrize edilmiş bileşen tanımları gibi düşünebilirsiniz.
218
218
219
-
## Uzlaşma: Alakasız Prop'ları Kapsanan Bileşen Üzerinden Geçirin {#convention-pass-unrelated-props-through-to-the-wrapped-component}
219
+
## Kural: Alakasız Propları Kapsanan Bileşen Üzerinden Geçirin {#convention-pass-unrelated-props-through-to-the-wrapped-component}
220
220
221
221
HOC’lar bileşenlere yeni özellikler eklerler. Ama genel olarak yaptığı işleri çok fazla değiştirmemeleri gerekir. HOC’tan dönen bir bileşenin, kapsanan bileşenle benzer bir interface’e sahip olması beklenir.
222
222
223
-
HOC’lar kendileriyle alakası olmayan prop’ları da geçirmelidirler. Çoğu HOC şu tarz bir render metoduna sahiptir:
223
+
HOC’lar kendileriyle alakası olmayan propları da geçirmelidirler. Çoğu HOC şu tarz bir render metoduna sahiptir:
224
224
225
225
```js
226
226
render() {
@@ -242,9 +242,9 @@ render() {
242
242
}
243
243
```
244
244
245
-
Bu uzlaşma HOC’ların yeterince değişken ve yeniden kullanılabilir olmasını sağlar.
245
+
Bu kural HOC’ların yeterince değişken ve yeniden kullanılabilir olmasını sağlar.
246
246
247
-
## Uzlaşma: Composability'yi En Üst Seviyeye Çıkartmak {#convention-maximizing-composability}
247
+
## Kural: Composability'yi En Üst Seviyeye Çıkartmak {#convention-maximizing-composability}
248
248
249
249
Tüm HOC’lar aynı gözükmez. Bazen sadece bir argüman aldıkları da olur, bu da kapsanan bileşendir:
250
250
@@ -258,7 +258,7 @@ Genellike HOC’lar başka argüman da alırlar. Relay’den alınan bu örnekte
Diğer bir deyişle, `connect` üst-seviye bileşen döndüren bir üst-seviye fonksiyon!
277
+
Diğer bir deyişle, `connect` üst-seviye bileşen döndüren bir üst-seviye fonksiyondur!
278
278
279
279
Bu şekil karmaşık ve gereksiz gözükebilir, ama işe yarayan bir özelliği var. `connect` tarafından döndürülen HOC’lar şöyle bir kullanıma sahiptir `Component => Component`. Girdisi ve çıktısı aynı olan fonksiyonların birbirleriyle kullanımı çok kolaydır.
`compose` fonksiyonu ana bir özelliği olmasa da kullanışlı olması açısından bir çok 3. Parti kütüphaneleri tarafından kullanılır, bunların içinde lodash([`lodash.flowRight`](https://lodash.com/docs/#flowRight) olarak), [Redux](https://redux.js.org/api/compose) ve [Ramda](https://ramdajs.com/docs/#compose) da bulunur.
298
298
299
-
## Uzlaşma: Kolay Debug Etmek için Gösterilen Adı Kapsayın {#convention-wrap-the-display-name-for-easy-debugging}
299
+
## Kural: Kolay Debug Etmek için Gösterilen Adı Kapsayın {#convention-wrap-the-display-name-for-easy-debugging}
300
300
301
301
HOC’lar tarafından yaratılan kapsayan bileşenler, diğer bileşenler gibi [React Developer Tools](https://github.com/facebook/react-devtools) tarafından gösterilir. Debug’lamayı kolaylaştırmak için, gösterilecek adı bu bileşenin bir HOC sonucu olduğunu belirtmesine özen gösterin.
302
302
@@ -323,7 +323,7 @@ function getDisplayName(WrappedComponent) {
323
323
324
324
React’ın fark algılama algoritması (reconcilliation olarak adlandırılır) var olan bileşen ağacını güncellemesi veya tamamen baştan yaratması gerektiğini anlamak için bileşen kimliğini kullanır. Eğer `render`'dan dönen bileşen bir önceki renderla aynıysa(`===`), React recursive bir şekilde bileşen ağacını yeni olanla farkını ölçelerek günceller. Eğer aynı değillerse, önceki bileşen ağacı tamamen kaldırlır.
325
325
326
-
Normalde, bunun hakkında düşünmeniz gerekmez. Fakat HOC kullanırken bu render methodu içerisinde HOC kullanayamacağınız anlamına gelir:
326
+
Normalde, bunun hakkında düşünmeniz gerekmez. Fakat HOC kullanırken bu render metodu içerisinde HOC kullanayamacağınız anlamına gelir:
327
327
328
328
```js
329
329
render() {
@@ -339,11 +339,11 @@ Buradaki tek sıkıntı performans değil — bir bileşeni tekrar mount etmek b
339
339
340
340
Bunun yerine HOC’u bileşen tanımının dışında yapın, bu sayede sonuç bileşen sadece bir kez yaratılmış olsun. Bu sayede bu bileşenin kimliği renderlar arasında tutarlı olacaktır. Zaten genelde istenilen davranış bu şekildedir.
341
341
342
-
HOC’u dinamik olarak uygulamanız gereken durumlarda ise bunu bileşenin yaşam döngüsü methodlarında veya bileşenin constructor’ında yapabilirsiniz.
342
+
HOC’u dinamik olarak uygulamanız gereken durumlarda ise bunu bileşenin yaşam döngüsü metodlarında veya bileşenin constructor’ında yapabilirsiniz.
Bazen bir react bileşeninde statik bir method tanımlamak kullanışlı olabilir. Örneğin, Relay container’ları GrahpQL ile birlikte kullanılması için `getFragment` diye statik bir metod açığa çıkarır.
346
+
Bazen bir react bileşeninde statik bir metod tanımlamak kullanışlı olabilir. Örneğin, Relay container’ları GrahpQL ile birlikte kullanılması için `getFragment` diye statik bir metod açığa çıkarır.
347
347
348
348
Bir bileşene HOC uyguladığınız zaman, orijinali bir container bileşen tarafından kapsanmış olabilir. Bu da yeni bileşenin orijinal bileşenin statik fonksiyonlarından hiçbirine sahip olmadığı anlamına gelir.
Üst-seviye bileşenlerin rahatlığı tüm prop’ların kapsanan bileşene geçirilmesi olmasına rağmen, bu `ref`’lerde işe yaramaz. Çünkü ref’ler aslında bir prop değildir — `key` gibi, React tarafından özel olarak yönetilir. Eğer sahip olduğu bir bileşeni, bir HOC sonucu olaran bir elemana ref eklerseniz; bu ref en dıştaki container bileşenine denk gelir, kapsanan bileşene değil.
398
+
Üst-seviye bileşenlerin rahatlığı tüm propların kapsanan bileşene geçirilmesi olmasına rağmen, bu `ref`’lerde işe yaramaz. Çünkü ref’ler aslında bir prop değildir — `key` gibi, React tarafından özel olarak yönetilir. Eğer sahip olduğu bir bileşeni, bir HOC sonucu olaran bir elemana ref eklerseniz; bu ref en dıştaki container bileşenine denk gelir, kapsanan bileşene değil.
399
399
400
-
Bu sorunun çözümü ise `React.forwardRef` API’nın (React 16.3’le tanıtıldı) kullanılmasıdır..[Ref’leri taşımak kısmında bu konu hakkında daha çok şey öğrenin.](/docs/forwarding-refs.html).
400
+
Bu sorunun çözümü ise `React.forwardRef` API’nın (React 16.3’le tanıtıldı) kullanılmasıdır. [Ref’leri taşımak kısmında bu konu hakkında daha çok şey öğrenin.](/docs/forwarding-refs.html).
0 commit comments