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/state-and-lifecycle.md
+31-31Lines changed: 31 additions & 31 deletions
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ next: handling-events.html
10
10
11
11
Bu sayfada, state kavramı ve React bileşlerinin yaşam döngüsü tanıtılacaktır. Bileşen API'si hakkında ayrıntılı bilgi için, [bu dokümana](/docs/react-component.html) bakabilirsiniz.
12
12
13
-
Önceki bölümlerde bahsettiğimiz](/docs/rendering-elements.html#updating-the-rendered-element), analog saat örneğini ele alalım. [Elemetlerin Render Edilmesi](/docs/rendering-elements.html#rendering-an-element-into-the-dom) bölümünde, kullanıcı arayüzünün yalnızca tek yönlü güncellenmesine yer vermiştik. Bunu `ReactDOM.render()` metodu ile geçekleştirebiliyorduk:
13
+
[Önceki bölümlerde bahsettiğimiz](/docs/rendering-elements.html#updating-the-rendered-element), analog saat örneğini ele alacağız. Hatırlayacağınız gibi, [elemetlerin Render Edilmesi](/docs/rendering-elements.html#rendering-an-element-into-the-dom) bölümünde, kullanıcı arayüzünün yalnızca tek yönlü güncellenmesine yer vermiştik. Bunu `ReactDOM.render()` metodu ile geçekleştirebiliyorduk:
Bu bölümde ise, `Clock`bileşeninin nasıl tekrar kullanılabilir ve izole hale getireceğimize değineceğiz. Bu bileşen, kendi zamanlayıcısını başlatacak ve her saniye kendisini güncelleyecek.
34
+
Bu bölümde ise, `Clock`bileşenini nasıl sarmalayacağımıza ve tekrar kullanılabilir hale getireceğimize değineceğiz. Bu bileşen, kendi zamanlayıcısını başlatacak ve her saniye kendisini güncelleyecek.
35
35
36
36
Öncelikle Clock'u, ayrı bir bileşen halinde sarmalayarak görüntüleyelim:
Güzel görünüyor ancak kritik bir gereksinimi atladık: `Clock` kendi zamanlayıcısını ayarlaması ve her saniye kullanıcı arayüzünü güncellemesi işi Clock bileşeni içerisinde yer almalıydı.
60
+
Güzel görünüyor ancak bu aşamada kritik bir gereksinimi atladık: `Clock`'un kendi zamanlayıcısını ayarlaması, ve her saniye kullanıcı arayüzünü güncellemesi işini kendi bünyesinde gerçekleştirmesi gerekiyordu.
61
61
62
-
İdeal olarak aşağıdaki kodu bir kere yazdığımızda, `Clock`'un artık kendi kendisini güncellemesini istiyoruz:
62
+
Aşağıdaki kodu bir kere yazdığımızda, `Clock`'un artık kendi kendisini güncellemesini istiyoruz:
63
63
64
64
```js{2}
65
65
ReactDOM.render(
@@ -68,15 +68,15 @@ ReactDOM.render(
68
68
);
69
69
```
70
70
71
-
Bunu yapmak için, `Clock` bileşenine "state eklememiz gerekiyor.
71
+
Bunu yapmak için, `Clock` bileşenine **state** eklememiz gerekiyor.
72
72
73
73
State'ler, prop'larla benzerlik gösterir. Fakat sadece ilgili bileşene özeldir ve yalnızca o bileşen tarafından kontrol edilirler.
74
74
75
75
Sınıf olarak oluşturulan bişeşenlerin, fonksiyon bileşenlerine göre bazı ek özelliklerinin bulunduğundan [bahsetmiştik](/docs/components-and-props.html#functional-and-class-components). Bahsettiğimiz ek özellik yerel state değişkenidir ve sadece sınıf bileşenlerine özgüdür.
76
76
77
77
## Bir Fonksiyonun Sınıfa Dönüştürülmesi {#converting-a-function-to-a-class}
78
78
79
-
`Clock` gibi bir fonksiyon bileşenini aşağıdaki 5 adımda sınıf bileşenine dönüştürebilirsiniz:
79
+
`Clock` gibi bir fonksiyon bileşenini 5 adımda sınıf bileşenine dönüştürebilirsiniz:
80
80
81
81
1. Öncelikle, fonksiyon ismiyle aynı isimde bir [ES6 sınıfı](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes) oluşturun. Ve bu sınıfı `React.Component`'tan türetin.
82
82
@@ -86,7 +86,7 @@ Sınıf olarak oluşturulan bişeşenlerin, fonksiyon bileşenlerine göre bazı
86
86
87
87
4.`render()` metodu içerisindeki `props` yazan yerleri, `this.props` ile değiştirin.
88
88
89
-
5.İçi boşaltılmış fonksiyonu silin.
89
+
5.Son olarak, içi boşaltılmış fonksiyonu tamamen silin.
90
90
91
91
```js
92
92
classClockextendsReact.Component {
@@ -103,13 +103,13 @@ class Clock extends React.Component {
Artık `Clock` bileşeni, fonksiyon yerine, bir sınıf bileşeni haline gelmiş oldu.
106
+
Önceden fonksiyon bileşeni olan `Clock`, artık bir sınıf bileşeni haline gelmiş oldu.
107
107
108
-
`render`metodu her güncelleme olduğunda çağrılacaktır. Fakat `<Clock />`'u aynı DOM düğümünde render ettiğimizden dolayı, `Clock` sınıfının yalnızca bir örneği kullanılacaktır.
108
+
Bu kodda `render`metodumuz, her güncelleme olduğunda yeniden çağrılacaktır. Fakat `<Clock />` bileşenini aynı DOM düğümünde render ettiğimizden dolayı, `Clock` sınıfının yalnızca bir örneği kullanılacaktır.
109
109
110
110
## Bir Sınıfa Yerel State'in Eklenmesi {#adding-local-state-to-a-class}
`date` değişkenini, props'tan state'e taşımamız gerekiyor. Bunu 3 adımda gerçekleştirebiliriz:
113
113
114
114
1)`render()` metodundaki `this.props.date`'i `this.state.date` ile değiştirelim:
115
115
@@ -126,7 +126,7 @@ class Clock extends React.Component {
126
126
}
127
127
```
128
128
129
-
2)`state`'in ilk oluşturulacağı yer olan [sınıf constructor](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes#Constructor)'ını ekleyelim:
129
+
2)`state`'in ilk kez oluşturulacağı yer olan [sınıf constructor](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes#Constructor)'ını ekleyelim:
130
130
131
131
```js{4}
132
132
class Clock extends React.Component {
@@ -146,7 +146,7 @@ class Clock extends React.Component {
146
146
}
147
147
```
148
148
149
-
`props`'ı constructor içerisinde nasıl oluşturduğumuza dikkat edin:
149
+
`props`'ı, constructor içerisinde nasıl oluşturduğumuza yakından bakalım:
150
150
151
151
```js{2}
152
152
constructor(props) {
@@ -197,11 +197,11 @@ ReactDOM.render(
197
197
198
198
## Bir Sınıfın Yaşam Döngüsü Kodlarının Eklenmesi {#adding-lifecycle-methods-to-a-class}
199
199
200
-
Birçok bileşene sahip uygulamalarda, bileşenler yok edildiğinde ilgili kaynakların boşaltılması çok önemlidir.
200
+
Birçok bileşene sahip uygulamalarda, bileşenler yok edildiğinde ilgili kaynakların bırakılması çok önemlidir.
201
201
202
202
`Clock` bileşeni ilk kez DOM'a render edildiğinde bir [zamanlayıcı](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval) kurmak istiyoruz. React'te bu olaya "mounting" (değişkenin takılması) adı verilir.
203
203
204
-
Ayrıca, `Clock` bileşeni DOM'dan çıkarıldığında silindiğinde zamanlayıcının da [temizlenmesini](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval) istiyoruz. React'te bu olaya "unmounting" (değişkenin çıkarılması) adı verilir.
204
+
Ayrıca, `Clock` bileşeni DOM'dan çıkarıldığında, zamanlayıcının da [temizlenmesini](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval) istiyoruz. React'te bu olaya "unmounting" (değişkenin çıkarılması) adı verilir.
205
205
206
206
`Clock` bileşeni takılıp çıkarıldığında bazı işleri gerçekleştirebilmek için özel metodlar tanımlayabiliriz:
207
207
@@ -244,9 +244,9 @@ Bileşenin çıktısı, DOM'a render edildikten sonra `componentDidMount()` meto
244
244
}
245
245
```
246
246
247
-
`this`'e zamanlayıcı ID'sini nasıl atadığımızı görebilirsiniz.
247
+
`this`'e zamanlayıcı ID'sini nasıl atadığımızı inceleyebilirsiniz.
248
248
249
-
Daha önce de belirttiğimiz gibi, `this.props` React tarafından yönetiliyor, ve `this.state`'in de özel bir yaşam döngüsü mevcut. Eğer `timerID` gibi veri akışına dahil olmayan değişkenleri saklamanız gerekiyorsa, bu örnekte yaptığımız gibi sınıf içerisinde değişkenler ekleyebilirsiniz.
249
+
Daha önce de belirttiğimiz gibi, `this.props` React tarafından yönetiliyor, ve `this.state`'in de özel bir yaşam döngüsü var. Eğer `timerID` gibi veri akışına dahil olmayan değişkenleri saklamanız gerekiyorsa, bu örnekte yaptığımız gibi sınıf içerisinde değişkenler tanımlayabilirsiniz.
250
250
251
251
Oluşturduğumuz zamanlayıcıyı `componentWillUnmount()` yaşam döngüsü metodu içerisinde `Clock` bileşeninden söküp çıkaralım:
252
252
@@ -256,7 +256,7 @@ Oluşturduğumuz zamanlayıcıyı `componentWillUnmount()` yaşam döngüsü met
256
256
}
257
257
```
258
258
259
-
Son olarak, `Clock` bileşeninin saniyede bir çalıştıracağı `tick()` fonksiyonunu implement edelim.
259
+
Son olarak, `Clock` bileşeninin saniyede bir çalıştıracağı `tick()` fonksiyonunu kodlayalım.
260
260
261
261
`tick()` fonksiyonu, `this.setState()`'i çağırarak `Clock` bileşeninin yerel state'ini güncelleyecektir:
262
262
@@ -306,23 +306,23 @@ Artık saat, her saniye başı tikleyerek mevcut zamanı görüntüleyecektir.
306
306
307
307
Şimdi kısa bir özet geçerek neler yaptığımızı ve sırasıyla hangi metotların çağrıldığını kontrol edelim:
308
308
309
-
1)`ReactDOM.render()` metoduna `<Clock />` aktarıldığı zaman React, `Clock` bileşeninin constructor'ını çağırır. `Clock` bileşeni, mevcut saati görüntülemesi gerektiğinden dolayı, `this.state`'e o anki zamanı atar. Daha sonra bu state'i güncelleyeceğiz.
309
+
1)`ReactDOM.render()` metoduna `<Clock />` aktarıldığı zaman React, `Clock` bileşeninin constructor'ını çağırır. `Clock` bileşeni, mevcut saati görüntülemesi gerektiğinden dolayı, `this.state`'e o anki zamanı atar. Daha sonra bu state güncellenecektir.
310
310
311
-
2)Daha sonra React, `Clock` bileşeninin `render()` metodunu çağırır. Bu sayede React, ekranda nelerin gösterilmesi gerektiğini bilir. Sonrasında React,`Clock`'un render edilmiş çıktısı ile eşleşmek için ilgili DOM güncellemelerini gerçekleştirir.
311
+
2)Devamında React, `Clock` bileşeninin `render()` metodunu çağırır. Bu sayede React, ekranda nelerin gösterilmesi gerektiğini bilir. Sonrasında ise`Clock`'un render edilmiş çıktısı ile eşleşmek için ilgili DOM güncellemelerini gerçekleştirir.
312
312
313
-
3)`Clock` bileşeninin çıktısı DOM'a eklendiğinde React, `componentDidMount()`yaşam döngüsü metodunu çağırır. Bu metodda `Clock` bileşeni, her saniyede bir `tick()` metodunun çalıştırılması gerektiğini tarayıcıya bildirir.
313
+
3)`Clock` bileşeninin çıktısı DOM'a eklendiğinde, yaşam döngüsündeki `componentDidMount()`metodu çağrılır. Bu metodda `Clock` bileşeni, her saniyede bir `tick()` metodunun çalıştırılması gerektiğini tarayıcıya bildirir.
314
314
315
315
4) Tarayıcı her saniyede bir `tick()` metodunu çağırır. `tick()` metodunda `Clock` bileşeni, kullanıcı arayüzünü güncellemek için `setState()` metodunu çağırır ve bu metoda mevcut tarih/saat değerini aktarır. `setState()`'in çağrılması sayesinde React, state'in değiştiğini anlar ve ekranda neyin görüntüleneceğini anlamak için tekrar `render()` metodunu çağırır. Artık `render()` metodundaki `this.state.date`'in değeri eski halinden farklı olduğundan dolayı, render çıktısı güncellenmiş zamanı içerecek demektir. Buna göre React, DOM'u ilgili şekilde günceller.
316
316
317
-
5) Eğer `Clock` bileşeni, DOM'dan çıkarılırsa React, `componentWillUnmount()`yaşam döngüsü metodunu çağırır ve zamanlayıcı, tarayıcı tarafından durdurulmuş olur.
317
+
5) Eğer `Clock` bileşeni, DOM'dan çıkarılırsa, yaşam döngüsündeki `componentWillUnmount()`metodu çağrılır ve tarayıcı tarafından zamanlayıcı durdurulmuş olur.
318
318
319
319
## State'in Doğru Kullanımı {#using-state-correctly}
320
320
321
321
`setState()` hakkında bilmeniz gereken 3 şey bulunmaktadır.
322
322
323
323
### State'i Direkt Olarak Değiştirmeyiniz {#do-not-modify-state-directly}
324
324
325
-
Aşağıdaki kod, bileşenin tekrar render edilmemesine neden olur:
325
+
Aşağıdaki kod, bileşenin yeniden render edilmesini **gerçekleştirmez**:
React, çoklu `setState()` çağrılarını, performans için tekil bir güncellemeye dönüştürebilir.
344
344
345
-
`this.props` ve `this.state` asenkron olarak güncellenebildiklerinden dolayı, sonraki state'i hesaplarken bu nesnelerin değerlerine **güvenmemelisiniz**.
345
+
`this.props` ve `this.state`, asenkron olarak güncellenebildiklerinden dolayı, sonraki state'i hesaplarken bu nesnelerin mevcut değerlerine **güvenmemelisiniz**.
346
346
347
347
Örneğin, aşağıdaki kod `counter`'ı güncellemeyebilir:
348
348
@@ -353,7 +353,7 @@ this.setState({
353
353
});
354
354
```
355
355
356
-
Bunu düzeltmek için, `setState()`'in ikinci formunu kullanmamız gerekiyor. Bu formda `setState()` fonksiyonu, parametre olarak nesne yerine fonksiyon alıyor. Bu fonksiyon, ilk parametre olarak önceki state'i, ikinci parametre olarak da o anda güncellenen props değerini alıyor:
356
+
Bunu düzeltmek için, `setState()`'in ikinci formunu kullanmamız gerekir. Bu formda `setState()` fonksiyonu, parametre olarak nesne yerine fonksiyon alır. Bu fonksiyon, ilk parametre olarak önceki state'i, ikinci parametre olarak da o anda güncellenen props değerini alır:
Ve siz de bu değişkenleri `setState()` çağrıları ile güncellemek isteyebilirsiniz:
392
+
Ve siz de bu değişkenleri, ayrı birer`setState()` çağrıları ile güncellemek isteyebilirsiniz:
393
393
394
394
```js{4,10}
395
395
componentDidMount() {
@@ -407,13 +407,13 @@ Ve siz de bu değişkenleri `setState()` çağrıları ile güncellemek isteyebi
407
407
}
408
408
```
409
409
410
-
Birleşme işlemi yüzeysel olduğundan dolayı, `this.setState({comments})` çağrısı `this.state.posts` değişkenini değişmeden bırakırken, `this.state.comments`'i tamamıyla değiştirir.
410
+
Birleşme işlemi yüzeysel olduğundan dolayı, `this.setState({comments})` çağrısı `this.state.posts` değişkenini değişmeden bırakırken, `this.state.comments`'i tamamıyla değiştirecektir.
411
411
412
412
## Verinin Alt Bileşenlere Aktarılması {#the-data-flows-down}
413
413
414
-
Ne ebeveyn ne de alt bileşenler, belirli bir bileşenin durumlu (stateful) veya durumsuz (stateless) olduğunu bilemez. Ayrıca o bileşenin fonksiyon veya sınıf olarak tanımlanmasını da önemsemezler.
414
+
Ne üst, ne de alt bileşenler, belirli bir bileşenin state'li veya state'siz olduğunu bilemez. Ayrıca o bileşenin fonksiyon veya sınıf olarak tanımlanmasını da önemsemezler.
415
415
416
-
Bu nedenle state'eyerel state veya izole state denir. State, kendisine sahip olan ve kendisini ayarlayan bileşen haricinde hiçbir bileşen için erişilebilir değildir.
416
+
Bu nedenle state'e, **yerel state** denir. State, kendisine sahip olan ve kendisini ayarlayan bileşen haricinde hiçbir bileşen için erişilebilir değildir.
417
417
418
418
Bir bileşen kendi state'ini, prop'lar aracılığıyla alt bileşenlere aktarabilir:
419
419
@@ -427,7 +427,7 @@ Kullanıcı tanımlı bileşenler için de bu durum geçerlidir:
427
427
<FormattedDate date={this.state.date} />
428
428
```
429
429
430
-
`FormattedDate` bileşeni, `date` değişkenini props'tan alabilir. Ve bunu alırken `Clock`'un state'inden mi yoksa prop'undan mı geldiğini bilemez. Hatta `date` değişkeni, `Clock`bileşenine elle yazılmış bir değer de olabilir ve bunu bilmesine imkanı yoktur:
430
+
`FormattedDate` bileşeni, `date` değişkenini props'tan alabilir. Ve bunu alırken `Clock`'un state'inden mi yoksa prop'undan mı geldiğini bilemez. Hatta `date` değişkeni, `Clock`bileşeni içerisinde state'ten harici olarak tanımlanmış bir değer de olabilir ve bunu da bilmesine imkanı yoktur:
0 commit comments