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
+25-25Lines changed: 25 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,21 +4,21 @@ title: State İçerisindeki Dizileri Güncelleme
4
4
5
5
<Intro>
6
6
7
-
JavaScript'te diziler mutasyona uğratılabilir (mutable) ancak siz state'te sakladığınız dizileri mutasyona uğratılamaz (immutable) olarak görmelisiniz. Tıpkı nesnelerde olduğu gibi, state'te saklanan bir diziyi güncellemek istediğiniz zaman yeni bir dizi oluşturmanız (veya var olanın bir kopyasını oluşturmanız) ve ardından yeni oluşturduğunuz diziyi kullanmak için state'i güncellemeniz gerekmektedir.
7
+
Diziler JavaScript'te değiştirilebilirdir, ancak bunları state içinde depolarken değiştirilemez olarak ele almalısınız. Tıpkı nesnelerde olduğu gibi, state'te depolanan bir diziyi güncellemek istediğinizde yeni bir dizi oluşturmanız (veya var olanın bir kopyasını oluşturmanız) ve ardından yeni oluşturduğunuz diziyi kullanmak için state'i güncellemeniz gerekir.
8
8
9
9
</Intro>
10
10
11
11
<YouWillLearn>
12
12
13
13
- React state'indeki bir diziye öğeler nasıl eklenir, çıkarılır ya da değiştirilir
14
-
-Bir dizi içindeki nesne nasıl güncellenir
14
+
-Dizi içindeki nesne nasıl güncellenir
15
15
- Immer kullanarak dizi kopyalama işlemi daha az tekrarla nasıl yapılır
JavaScript'te diziler de bir tür nesnedir. [Nesnelerde olduğu gibi](/learn/updating-objects-in-state), **React state'indeki dizileri salt okunur olarak görmelisiniz.** Bu, `arr[0] = 'bird'` şeklinde bir dizi içindeki öğeleri başka değerlere yeniden atamamanız, ayrıca `push()` ve `pop()` gibi dizileri mutasyona uğratan JavaScript metodlarını kullanmamanız gerektiği anlamına gelir.
21
+
JavaScript'te diziler bir nesne türüdür. [Nesnelerde olduğu gibi](/learn/updating-objects-in-state), **React state'indeki dizileri salt okunur olarak görmelisiniz.** Bu, `arr[0] = 'bird'` şeklinde bir dizi içindeki öğeleri başka değerlere yeniden atamamanız, ayrıca `push()` ve `pop()` gibi dizileri mutasyona uğratan JavaScript metodlarını kullanmamanız gerektiği anlamına gelir.
22
22
23
23
Bu metodları kullanmak yerine, bir diziyi her güncellemek istediğinizde state setter fonksiyonunuza *yeni* bir dizi iletmelisiniz. Bunu yapmak için, `filter()` ve `map()` gibi diziyi mutasyona uğratmayan JavaScript metodlarını kullanarak orijinal diziden yeni bir dizi oluşturabilirsiniz. Ardından, state'inizi kopyaladığınız dizi olarak güncelleyebilirsiniz.
24
24
@@ -44,9 +44,9 @@ React'te, `slice` (`p` yok!) metodunu daha sık kullanacaksınız çünkü state
44
44
45
45
</Pitfall>
46
46
47
-
### Bir diziye eklemek {/*adding-to-an-array*/}
47
+
### Diziye öğe eklemek {/*adding-to-an-array*/}
48
48
49
-
`push()` metodu diziyi mutasyona uğratacaktır ancak biz bunu istemiyoruz.
49
+
`push()` metodu diziyi mutasyona uğratacaktır, ki bunu istemezsiniz:
50
50
51
51
<Sandpack>
52
52
@@ -88,13 +88,13 @@ button { margin-left: 5px; }
88
88
89
89
</Sandpack>
90
90
91
-
Bunun yerine, mevcut öğeleri *ve*dizinin son elemanı olarak yeni öğeyi içeren *yeni* diziyi oluşturun. Bunu yapmanın birden çok yolu vardır ancak en kolay yol `...`[dizi spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#spread_in_array_literals) sözdizimini kullanmaktır:
91
+
Bunun yerine, mevcut öğeleri *ve* son eleman olarak yeni öğeyi içeren *yeni* diziyi oluşturun. Bunu yapmanın birden çok yolu vardır ancak en kolay yol `...`[dizi spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#spread_in_array_literals) sözdizimini kullanmaktır:
92
92
93
93
```js
94
94
setArtists( // State'i yeni bir dizi
95
95
[ // ile değiştirin
96
-
...artists, // bu eski öğelerin hepsini içerir
97
-
{ id: nextId++, name: name } // ve dizinin sonuna eklenecek yeni öğe
96
+
...artists, // bu eski öğelerin tümünü
97
+
{ id: nextId++, name: name } // ve sona eklenecek yeni öğeyi içerir.
98
98
]
99
99
);
100
100
```
@@ -152,9 +152,9 @@ setArtists([
152
152
153
153
Bu şekilde, spread sözdizimi `push()` (öğeyi dizinin sonuna eklemek) ve `unshift()` (öğeyi dizinin başına eklemek) metodlarının görevini yapabilir. Yukarıdaki sandbox'ta deneyebilirsiniz!
154
154
155
-
### Bir diziden çıkartmak {/*removing-from-an-array*/}
Diziden bir öğeyi çıkartmanın en kolay yolu o öğeyi *filtrelemek'tir.* Bir başka deyişle, o öğeyi içermeyen yeni bir dizi oluşturmaktır. Bunu yapmak için `filter` metodunu kullanabilirsiniz. Örneğin:
157
+
Diziden bir öğeyi çıkartmanın en kolay yolu o öğeyi *filtrelemektir.* Bir başka deyişle, o öğeyi içermeyen yeni bir dizi oluşturmaktır. Bunu yapmak için `filter` metodunu kullanabilirsiniz. Örneğin:
158
158
159
159
<Sandpack>
160
160
@@ -206,11 +206,11 @@ setArtists(
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` metodunun orijinal diziyi değiştirmediğini unutmayın.
209
+
Burada `artists.filter(a => a.id !== artist.id)` ifadesi "`artist` dizisini kullanarak ID'leri `artist.id`'den farklı olan öğelerle 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
-
### Bir diziyi dönüştürmek {/*transforming-an-array*/}
211
+
### Diziyi dönüştürme {/*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 veya indeksine (veya her ikisine) dayalı olarak her bir öğeyle ne yapacağınızı belirler.
213
+
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) bağlı 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
@@ -278,7 +278,7 @@ body { height: 300px; }
278
278
279
279
</Sandpack>
280
280
281
-
### Bir dizideki öğeleri değiştirmek {/*replacing-items-in-an-array*/}
Bir dizideki bir veya daha fazla öğeyi değiştirmek oldukça sık istenmektedir. `arr[0] = 'bird'` gibi atamalar yapmak orijinal diziyi mutasyona uğrattığı için burada da `map` metodunu kullanmak mantıklı olacaktır.
284
284
@@ -332,11 +332,11 @@ button { margin: 5px; }
332
332
333
333
</Sandpack>
334
334
335
-
### Dizide belli bir konuma eklemek {/*inserting-into-an-array*/}
335
+
### Dizide belli bir konuma öğe ekleme {/*inserting-into-an-array*/}
336
336
337
-
Bazen bir öğeyi ne dizinin başına ne de dizinin sonuna değil de belirlediğiniz başka bir konuma eklemek isteyebilirsiniz. Bunu yapmak için, `...` dizi spread sözdizimini `slice()` metodu ile beraber kullanabilirsiniz. `slice()` metodu diziden bir "dilim (slice)" almanızı sağlar. Yeni öğeyi eklemek için, eklemek istediğiniz konumdan önceki dilimden spread sözdizimi ile yeni bir dizi oluşturacak, ardından yeni öğeyi ekleyecek ve son olarak da orijinal dizinin geri kalanını ekleyeceksiniz.
337
+
Bazen bir öğeyi dizinin başına ya da sonuna değil de belirli bir konuma eklemek isteyebilirsiniz. Bunu yapmak için, `...` dizi spread sözdizimini `slice()` metodu ile beraber kullanabilirsiniz. `slice()` metodu diziden bir "dilim (slice)" almanızı sağlar. Yeni öğeyi eklemek için, eklemek istediğiniz konumdan önceki dilimden spread sözdizimi ile yeni bir dizi oluşturacak, ardından yeni öğeyi ekleyecek ve son olarak da orijinal dizinin geri kalanını ekleyeceksiniz.
338
338
339
-
Bu örnekte, Ekle butonu her zaman `1` indeksinde ekler:
339
+
Bu örnekte, Ekle butonu her zaman `1.` indekse ekler:
340
340
341
341
<Sandpack>
342
342
@@ -396,9 +396,9 @@ button { margin-left: 5px; }
396
396
397
397
</Sandpack>
398
398
399
-
### Bir dizide başka değişiklikler yapmak {/*making-other-changes-to-an-array*/}
399
+
### Dizide başka değişiklikler yapma {/*making-other-changes-to-an-array*/}
400
400
401
-
Spread sözdizimi, `map()` ve `filter()`metodları gibi diziyi mutasyona uğratmayan yöntemlerle yapamayacağınız bazı şeyler vardır. Örneğin, bir diziyi sıralamak veya dizi öğelerini ters çevirmek isteyebilirsiniz. JavaScript'in `reverse()` ve `sort()` metodları orijinal diziyi mutasyona uğrattığından dolayı direkt olarak bu metodları kullanamazsınız.
401
+
Spread sözdizimi veya `map()` ve `filter()` gibi diziyi mutasyona uğratmayan metodlarla yapamayacağınız bazı şeyler vardır. Örneğin, bir diziyi sıralamak veya dizi öğelerini ters çevirmek isteyebilirsiniz. JavaScript'in `reverse()` ve `sort()` metodları orijinal diziyi değiştirir, bu nedenle doğrudan bu metodları kullanamazsınız.
402
402
403
403
**Ancak, önce diziyi kopyalayabilir ve sonra o dizi üzerinde değişiklikler yapabilirsiniz.**
404
404
@@ -454,13 +454,13 @@ setList(nextList);
454
454
455
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
-
## Dizi içindeki nesneleri güncelleme {/*updating-objects-inside-arrays*/}
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!
459
+
Nesneler _gerçekte_ dizilerin "içinde" yer almazlar. Yazdığınız kodda "içinde" gibi 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ı 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:
463
+
Bu örnekte, iki farklı sanat eseri listesi aynı başlangıç state'ine 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 listeyi de etkilemektedir:
464
464
465
465
<Sandpack>
466
466
@@ -792,7 +792,7 @@ Arka planda Immer, `draft`'a yaptığınız değişikliklere göre her zaman bir
792
792
793
793
#### Alışveriş sepetindeki ürünü güncelleyin {/*update-an-item-in-the-shopping-cart*/}
794
794
795
-
`handleIncreaseClick` fonksiyonunun mantığını yazın ki "+" butonuna tıklandığında ürünün sepetteki sayısı artsın:
795
+
"+" butonuna tıklandığında ilgili sayının artması için `handleIncreaseClick` mantığını doldurun:
#### Immer kullanarak mutasyonları düzeltin {/*fix-the-mutations-using-immer*/}
1415
1415
1416
-
Bu örnekle bir önceki örnek aynıdır. Bu sefer mutasyonları Immer kullanarak düzelteceğiz. `useImmer` halihazırda import edilmiştir, yani kullanmak için `todos` state değişkenini değiştirmeniz gerekmektedir.
1416
+
Bu örnekle bir önceki örnek aynıdır. Bu sefer Immer kullanarak mutasyonları düzeltin. Kolaylık sağlaması için, `useImmer` halihazırda içeri aktarılmıştır. Bunu kullanarak `todos` state değişkenini değiştirmeniz gerekir.
0 commit comments