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: src/content/learn/updating-arrays-in-state.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -198,19 +198,19 @@ export default function List() {
198
198
199
199
</Sandpack>
200
200
201
-
"Sil" butonuna bir kaç kez tıklayın ve tıklama yöneticisine bakın.
201
+
"Sil" butonuna birkaç kez tıklayın ve tıklama yöneticisine bakın.
202
202
203
203
```js
204
204
setArtists(
205
205
artists.filter(a=>a.id!==artist.id)
206
206
);
207
207
```
208
208
209
-
Burada `artists.filter(a => a.id !== artist.id)` ifadesi "ID'leri `artist.id`'den farklı olan `artists`'den oluşan yeni bir dizi oluştur" anlamına gelmektedir. Diğer bir deyişle, her bir artist'e karşılık gelen "Sil" butonu o artist'i diziden filtreleyecek ve nihai dizi ile yeniden render isteği gönderecektir. `filter`metodu orijinal diziyi değiştirmez.
209
+
Burada `artists.filter(a => a.id !== artist.id)` ifadesi "ID'leri `artist.id`'den farklı olan `artists`'den oluşan yeni bir dizi oluştur" anlamına gelmektedir. Diğer bir deyişle, her bir artist'e karşılık gelen "Sil" butonu o artist'i diziden filtreleyecek ve nihai dizi ile yeniden render isteği gönderecektir. `filter`metodunun orijinal diziyi değiştirmediğini unutmayın.
210
210
211
211
### Bir diziyi dönüştürmek {/*transforming-an-array*/}
212
212
213
-
Eğer dizideki bazı ya da tüm öğeleri değiştirmek isterseniz **yeni** bir dizi oluşturmak için `map()` metodunu kullanabilirsiniz. `map`'e ileteceğiniz fonksiyon, verisine ya da indeksine (veya her ikisine) dayalı olarak her bir öğeyle ne yapacağınızı belirler.
213
+
Eğer dizideki bazı ya da tüm öğeleri değiştirmek isterseniz **yeni** bir dizi oluşturmak için `map()` metodunu kullanabilirsiniz. `map`'e ileteceğiniz fonksiyon, verisine veya indeksine (veya her ikisine) dayalı olarak her bir öğeyle ne yapacağınızı belirler.
214
214
215
215
Bu örnekte dizi, iki daire ve bir karenin koordinatlarını içermektedir. Butona tıkladığınız zaman sadece daireler 50 piksel aşağı hareket etmektedir. Bunu, `map()` metodunu kullanıp yeni bir veri dizisi oluşturarak yapar:
216
216
@@ -236,7 +236,7 @@ export default function ShapeEditor() {
236
236
// Değişiklik yok
237
237
return shape;
238
238
} else {
239
-
// 50 piksel aşağıda yeni bir daire döndür
239
+
// 50 piksel aşağıda yeni bir daire döndürür
240
240
return {
241
241
...shape,
242
242
y:shape.y+50,
@@ -442,25 +442,25 @@ export default function List() {
442
442
443
443
</Sandpack>
444
444
445
-
Burada `[...list]` spread sözdizimi kullanılarak orijinal dizinin bir kopyası oluşturulur. Artık bir kopyanız olduğuna göre `nextList.reverse()` ya da `nextList.sort()` gibi mutasyona sebep olan metodları kullanabilir, hatta `nextList[0] = "something"` ile öğeleri tek tek yeni değerlerine atayabilirsiniz.
445
+
Burada `[...list]` spread sözdizimi kullanılarak orijinal dizinin bir kopyası oluşturulur. Artık bir kopyanız olduğuna göre `nextList.reverse()` ya da `nextList.sort()` gibi mutasyona sebep olan metodlar kullanabilir, hatta `nextList[0] = "something"` ile öğeleri tek tek yeni değerlerine atayabilirsiniz.
446
446
447
-
Ancak, **bir diziyi kopyalasanız bile dizinin _içindeki_ öğeleri doğrudan mutasyona uğratamazsınız.** Bunun nedeni yaptığınız kopyalamanın yüzeysel (shallow) olmasıdır yani yeni dizi, orijinal diziyle aynı öğeleri içermektedir. Dolayısıyla, kopyalanan dizinin içindeki bir nesneyi değiştirdiğiniz zaman mevcut state'i de mutasyona uğratmış olursunuz. Örneğin, aşağıdaki gibi bir kod sorunludur.
447
+
Ancak, **bir diziyi kopyalasanız bile dizinin _içindeki_ öğeleri doğrudan mutasyona uğratamazsınız.** Bunun nedeni yaptığınız kopyalamanın yüzeysel (shallow) olmasıdır. Yani yeni dizi, orijinal diziyle aynı öğeleri içermektedir. Dolayısıyla, kopyalanan dizinin içindeki bir nesneyi değiştirdiğiniz zaman mevcut state'i de mutasyona uğratmış olursunuz. Örneğin, aşağıdaki gibi bir kod sorunludur.
`nextList` ve `list` iki farklı dizi olmasına rağmen, **`nextList[0]` ve `list[0]` ifadeleri aynı nesneyi işaret eder.** Yani `nextList[0].seen`ifadesini değiştirirseniz, aynı zamanda `list[0].seen`ifadesini de değiştirmiş olursunuz. Bu, state'i mutasyona uğratmaktır ki bundan kaçınmalısınız! Bu sorunu [iç içe JavaScript nesnelerini güncelleme](/learn/updating-objects-in-state#updating-a-nested-object) yöntemine benzer şekilde, değiştirmek istediğiniz öğeleri mutasyona uğratmak yerine tek tek kopyalayarak çözebilirsiniz. Nasıl yapıldığını görelim.
455
+
`nextList` ve `list` iki farklı dizi olmasına rağmen, **`nextList[0]` ve `list[0]` ifadeleri aynı nesneyi işaret eder.** Yani `nextList[0].seen`değerini değiştirirseniz, aynı zamanda `list[0].seen`değerini de değiştirmiş olursunuz. Bu, state'i mutasyona uğratmaktır ki bundan kaçınmalısınız! Bu sorunu [iç içe JavaScript nesnelerini güncelleme](/learn/updating-objects-in-state#updating-a-nested-object) yöntemine benzer şekilde, değiştirmek istediğiniz öğeleri mutasyona uğratmak yerine tek tek kopyalayarak çözebilirsiniz. Nasıl yapıldığını görelim.
456
456
457
457
## Dizi içindeki nesneleri güncelleme {/*updating-objects-inside-arrays*/}
458
458
459
-
Nesneler dizilerin _gerçekten_ "içinde" değillerdir. Yazdığınız kodda "içeride" olarak görünebilir ancak bir dizideki her nesne, dizinin "işaret ettiği" ayrı bir değerdir. Bu yüzden `list[0]` gibi iç içe ifadeleri değiştirirken dikkatli olmalısınız. Başka bir kişinin eser listesi (artwork list), dizinin aynı öğesine işaret edebilir!
459
+
Nesneler dizilerin _gerçekten_ "içinde" değillerdir. Yazdığınız kodda "içeride" olarak görünebilir ancak bir dizideki her nesne, dizinin "işaret ettiği" ayrı bir değerdir. Bu yüzden `list[0]` gibi iç içe ifadeleri değiştirirken dikkatli olmalısınız. Başka bir kişinin sanat eseri listesi (artwork list), dizinin aynı öğesine işaret edebilir!
460
460
461
461
**İç içe geçmiş state'i güncellerken, güncellemek istediğiniz noktadan en üst düzeye kadar kopyalar oluşturmanız gerekir.** Şimdi bunun nasıl olduğunu görelim.
462
462
463
-
Bu örnekte, iki farklı eser listesi aynı ilk state'e (initialList) sahiptir. Bu listelerin izole olmaları gerekirdi ancak bir mutasyon nedeniyle yanlışlıkla state'leri paylaşmaktadırlar ve listedeki bir kutuyu işaretlemek diğer listedeki kutuları da etkilemektedir:
463
+
Bu örnekte, iki farklı sanat eseri listesi aynı ilk state'e (initialList) sahiptir. Bu listelerin izole olmaları gerekirdi ancak bir mutasyon nedeniyle yanlışlıkla state'leri paylaşmaktadırlar ve listedeki bir kutuyu işaretlemek diğer listedeki kutuları da etkilemektedir:
464
464
465
465
<Sandpack>
466
466
@@ -501,11 +501,11 @@ export default function BucketList() {
501
501
return (
502
502
<>
503
503
<h1>Görülecek Sanat Eserleri Listesi</h1>
504
-
<h2>Görmek istediğim sanatlar listesi:</h2>
504
+
<h2>Görmek istediğim eserler listesi:</h2>
505
505
<ItemList
506
506
artworks={myList}
507
507
onToggle={handleToggleMyList} />
508
-
<h2>Senin görmek istediğinsanatlar listesi:</h2>
508
+
<h2>Senin görmek istediğineserler listesi:</h2>
509
509
<ItemList
510
510
artworks={yourList}
511
511
onToggle={handleToggleYourList} />
@@ -614,11 +614,11 @@ export default function BucketList() {
614
614
return (
615
615
<>
616
616
<h1>Görülecek Sanat Eserleri Listesi</h1>
617
-
<h2>Görmek istediğim sanatlar listesi:</h2>
617
+
<h2>Görmek istediğim eserler listesi:</h2>
618
618
<ItemList
619
619
artworks={myList}
620
620
onToggle={handleToggleMyList} />
621
-
<h2>Senin görmek istediğinsanatlar listesi:</h2>
621
+
<h2>Senin görmek istediğineserler listesi:</h2>
622
622
<ItemList
623
623
artworks={yourList}
624
624
onToggle={handleToggleYourList} />
@@ -763,7 +763,7 @@ function ItemList({ artworks, onToggle }) {
763
763
764
764
</Sandpack>
765
765
766
-
Immer ile **`artwork.seen = nextSeen` gibi mutasyonlar artık sorun çıkarmadığına dikkat edin:**
766
+
Immer ile **`artwork.seen = nextSeen` gibi mutasyonların artık sorun çıkarmadığına dikkat edin:**
767
767
768
768
```js
769
769
updateMyTodos(draft=> {
@@ -772,7 +772,7 @@ updateMyTodos(draft => {
772
772
});
773
773
```
774
774
775
-
Bunun nedeni, _orijinal_ state'i mutasyona uğratmamanızdır. Burada Immer tarafından sağlanan özel bir `draft` nesnesini mutasyona uğratmaktayız. Benzer şekilde, `draft`nesnesinde`push()` ve `pop()` gibi mutasyona neden olan metodları da uygulayabilirsiniz.
775
+
Bunun nedeni, _orijinal_ state'i mutasyona uğratmamanızdır. Burada Immer tarafından sağlanan özel bir `draft` nesnesini mutasyona uğratmaktayız. Benzer şekilde, `draft`nesnesine`push()` ve `pop()` gibi mutasyona neden olan metodları da uygulayabilirsiniz.
776
776
777
777
Arka planda Immer, `draft`'a yaptığınız değişikliklere göre her zaman bir sonraki state'i sıfırdan oluşturur. Bu, olay yönetecilerinizi, state'i hiç mutasyona uğratmadan kısa ve öz olarak tutar.
778
778
@@ -1080,7 +1080,7 @@ button { margin: 5px; }
1080
1080
1081
1081
#### Mutasyona uğratmayan metodlar kullanarak mutasyonları düzeltin {/*fix-the-mutations-using-non-mutative-methods*/}
1082
1082
1083
-
Bu örnekte, `App.js` dosyasındaki tüm olay yönetecileri dizileri mutasyona uğratacak metodlar kullanmaktadır. Bu nedenle, yapılacaklar listesini düzenlemek ve silmek çalışmamaktadır. `handleAddTodo`, `handleChangeTodo`, ve `handleDeleteTodo` fonksiyonlarını mutasyona uğratmayan metodlar kullanarak tekrar yazın:
1083
+
Bu örnekte, `App.js` dosyasındaki tüm olay yönetecileri dizileri mutasyona uğratacak metodlar kullanmaktadır. Bu nedenle, yapılacaklar listesindekileri düzenlemek ve silmek çalışmamaktadır. `handleAddTodo`, `handleChangeTodo`, ve `handleDeleteTodo` fonksiyonlarını mutasyona uğratmayan metodlar kullanarak tekrar yazın:
Immer ile mutasyona uğratan ve uğratmayan yaklaşımları beraber kullanabilirsiniz.
1785
1785
1786
-
Örneğin, bu sürümde`handleAddTodo` fonksiyonu Immer `draft`'ı mutasyona uğratacak şekilde yazılırken, `handleChangeTodo` ve `handleDeleteTodo` fonksiyonları mutasyona uğratmayan `map` ve `filter` metodları ile yazılmıştır:
1786
+
Örneğin, burada`handleAddTodo` fonksiyonu Immer `draft`'ı mutasyona uğratacak şekilde yazılırken, `handleChangeTodo` ve `handleDeleteTodo` fonksiyonları mutasyona uğratmayan `map` ve `filter` metodları ile yazılmıştır:
0 commit comments