Skip to content

Commit 1a441c6

Browse files
Revised
1 parent 16164bc commit 1a441c6

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

content/docs/state-and-lifecycle.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ next: handling-events.html
1010

1111
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.
1212

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:
1414

1515
```js{8-11}
1616
function tick() {
@@ -31,7 +31,7 @@ setInterval(tick, 1000);
3131

3232
[**CodePen'de deneyin**](http://codepen.io/gaearon/pen/gwoJZk?editors=0010)
3333

34-
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.
3535

3636
Öncelikle Clock'u, ayrı bir bileşen halinde sarmalayarak görüntüleyelim:
3737

@@ -57,9 +57,9 @@ setInterval(tick, 1000);
5757

5858
[**CodePen'de deneyin**](http://codepen.io/gaearon/pen/dpdoYR?editors=0010)
5959

60-
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.
6161

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:
6363

6464
```js{2}
6565
ReactDOM.render(
@@ -68,15 +68,15 @@ ReactDOM.render(
6868
);
6969
```
7070

71-
Bunu yapmak için, `Clock` bileşenine "state eklememiz gerekiyor.
71+
Bunu yapmak için, `Clock` bileşenine **state** eklememiz gerekiyor.
7272

7373
State'ler, prop'larla benzerlik gösterir. Fakat sadece ilgili bileşene özeldir ve yalnızca o bileşen tarafından kontrol edilirler.
7474

7575
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.
7676

7777
## Bir Fonksiyonun Sınıfa Dönüştürülmesi {#converting-a-function-to-a-class}
7878

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:
8080

8181
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.
8282

@@ -86,7 +86,7 @@ Sınıf olarak oluşturulan bişeşenlerin, fonksiyon bileşenlerine göre bazı
8686

8787
4. `render()` metodu içerisindeki `props` yazan yerleri, `this.props` ile değiştirin.
8888

89-
5. İçi boşaltılmış fonksiyonu silin.
89+
5. Son olarak, içi boşaltılmış fonksiyonu tamamen silin.
9090

9191
```js
9292
class Clock extends React.Component {
@@ -103,13 +103,13 @@ class Clock extends React.Component {
103103

104104
[**CodePen'de deneyin**](http://codepen.io/gaearon/pen/zKRGpo?editors=0010)
105105

106-
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.
107107

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.
109109

110110
## Bir Sınıfa Yerel State'in Eklenmesi {#adding-local-state-to-a-class}
111111

112-
`date` değişkenini, props'tan state'e 3 adımda taşıyacağız:
112+
`date` değişkenini, props'tan state'e taşımamız gerekiyor. Bunu 3 adımda gerçekleştirebiliriz:
113113

114114
1) `render()` metodundaki `this.props.date`'i `this.state.date` ile değiştirelim:
115115

@@ -126,7 +126,7 @@ class Clock extends React.Component {
126126
}
127127
```
128128

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:
130130

131131
```js{4}
132132
class Clock extends React.Component {
@@ -146,7 +146,7 @@ class Clock extends React.Component {
146146
}
147147
```
148148

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:
150150

151151
```js{2}
152152
constructor(props) {
@@ -197,11 +197,11 @@ ReactDOM.render(
197197

198198
## Bir Sınıfın Yaşam Döngüsü Kodlarının Eklenmesi {#adding-lifecycle-methods-to-a-class}
199199

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.
201201

202202
`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.
203203

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.
205205

206206
`Clock` bileşeni takılıp çıkarıldığında bazı işleri gerçekleştirebilmek için özel metodlar tanımlayabiliriz:
207207

@@ -244,9 +244,9 @@ Bileşenin çıktısı, DOM'a render edildikten sonra `componentDidMount()` meto
244244
}
245245
```
246246

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.
248248

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.
250250

251251
Oluşturduğumuz zamanlayıcıyı `componentWillUnmount()` yaşam döngüsü metodu içerisinde `Clock` bileşeninden söküp çıkaralım:
252252

@@ -256,7 +256,7 @@ Oluşturduğumuz zamanlayıcıyı `componentWillUnmount()` yaşam döngüsü met
256256
}
257257
```
258258

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.
260260

261261
`tick()` fonksiyonu, `this.setState()`'i çağırarak `Clock` bileşeninin yerel state'ini güncelleyecektir:
262262

@@ -306,23 +306,23 @@ Artık saat, her saniye başı tikleyerek mevcut zamanı görüntüleyecektir.
306306

307307
Şimdi kısa bir özet geçerek neler yaptığımızı ve sırasıyla hangi metotların çağrıldığını kontrol edelim:
308308

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.
310310

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.
312312

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.
314314

315315
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.
316316

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.
318318

319319
## State'in Doğru Kullanımı {#using-state-correctly}
320320

321321
`setState()` hakkında bilmeniz gereken 3 şey bulunmaktadır.
322322

323323
### State'i Direkt Olarak Değiştirmeyiniz {#do-not-modify-state-directly}
324324

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**:
326326

327327
```js
328328
// Yanlış kullanım
@@ -342,7 +342,7 @@ this.setState({comment: 'Hello'});
342342

343343
React, çoklu `setState()` çağrılarını, performans için tekil bir güncellemeye dönüştürebilir.
344344

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**.
346346

347347
Örneğin, aşağıdaki kod `counter`'ı güncellemeyebilir:
348348

@@ -353,7 +353,7 @@ this.setState({
353353
});
354354
```
355355

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:
357357

358358
```js
359359
// Doğru kullanım
@@ -375,9 +375,9 @@ this.setState(function(state, props) {
375375

376376
### State Güncellemeleri Birleştirilir {#state-updates-are-merged}
377377

378-
`setState()`'i çağırdığınızda React, parametre olarak verdiğiniz nesneyi alıp, mevcut state'e birleştirir.
378+
React, `setState()`'i çağırdığınızda, parametre olarak verdiğiniz nesneyi alıp mevcut state'e aktarır.
379379

380-
Örneğin, state'iniz birçok bağımsız değişken içerebilir:
380+
Örneğin, state'iniz aşağıdaki gibi birçok bağımsız değişkeni içerebilir:
381381

382382
```js{4,5}
383383
constructor(props) {
@@ -389,7 +389,7 @@ this.setState(function(state, props) {
389389
}
390390
```
391391

392-
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:
393393

394394
```js{4,10}
395395
componentDidMount() {
@@ -407,13 +407,13 @@ Ve siz de bu değişkenleri `setState()` çağrıları ile güncellemek isteyebi
407407
}
408408
```
409409

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.
411411

412412
## Verinin Alt Bileşenlere Aktarılması {#the-data-flows-down}
413413

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.
415415

416-
Bu nedenle state'e yerel 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.
417417

418418
Bir bileşen kendi state'ini, prop'lar aracılığıyla alt bileşenlere aktarabilir:
419419

@@ -427,7 +427,7 @@ Kullanıcı tanımlı bileşenler için de bu durum geçerlidir:
427427
<FormattedDate date={this.state.date} />
428428
```
429429

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:
431431

432432
```js
433433
function FormattedDate(props) {

0 commit comments

Comments
 (0)