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/referencing-values-with-refs.md
+18-18Lines changed: 18 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,7 +17,7 @@ Bir bileşenin "hatırlamasını" istediğiniz bilgi varsa, ancak bu bilginin [y
17
17
18
18
</YouWillLearn>
19
19
20
-
## Bir bileşene ref eklemek {/*adding-a-ref-to-a-component*/}
20
+
## Bir bileşene ref eklemek {/*adding-a-ref-to-your-component*/}
21
21
22
22
Bileşeninize bir ref eklemek için, `useRef` Hook'unu React'ten içe aktarın:
23
23
@@ -98,7 +98,7 @@ export default function Stopwatch() {
98
98
setNow(Date.now());
99
99
100
100
setInterval(() => {
101
-
//"now" state değişkenini her 10ms'de günceller.
101
+
//Şuanki zamanı her 10ms'de bir güncelle.
102
102
setNow(Date.now());
103
103
}, 10);
104
104
}
@@ -171,9 +171,9 @@ export default function Stopwatch() {
171
171
172
172
Ne zaman bir bilgi render etmek için kullanılırsa, onu state'te tutun. Bir bilgi parçası yalnızca olay işleyicileri için gerekiyorsa ve değiştirmek bir yeniden render gerektirmiyorsa, bir ref kullanmak daha verimli olabilir.
173
173
174
-
## Ref ve State arasındaki farklar {/*differences-between-refs-and-state*/}
174
+
## Ref ve state arasındaki farklar {/*differences-between-refs-and-state*/}
175
175
176
-
Muhtemelen ref'lerin state'ten daha "esnek" olduğunu düşünüyorsunuz. Örneğin, ref'leri state ayarlama fonksiyonu olmadan değiştirebilirsiniz. Ama çoğu zaman state kullanmak isteyeceksiniz. Ref'ler bir "kaçış noktası"dır ve bunlara çok fazla güvenmemelisiniz. State ve ref'ler arasındaki farkları görelim:
176
+
Muhtemelen ref'lerin state'ten daha "esnek" olduğunu düşünüyorsunuz. Örneğin, ref'leri state ayarlama fonksiyonu olmadan değiştirebilirsiniz. Ama çoğu zaman state kullanmak isteyeceksiniz. Ref'ler çoğunlukla ihtiyacınız olmayan bir "kaçış noktası"dır. State ve ref'ler arasındaki farkları görelim:
177
177
178
178
179
179
@@ -184,7 +184,7 @@ Muhtemelen ref'lerin state'ten daha "esnek" olduğunu düşünüyorsunuz. Örne
184
184
| Değiştirilebilir; `current` değerini render işlemi dışında da değiştirilebilir ve güncelleyebilirsiniz. | Değiştirilemez; yeniden render tetiklemek için state değiştirme fonksiyonunu kullanmalısınız. |
185
185
| Render işlemi sırasında `current` değerini okumamalısınız (veya yazmamalısınız). | State'i her zaman okuyabilirsiniz. Ancak, her render'ın değişmeyen kendi [anlık görüntüsü](/learn/state-as-a-snapshot) vardır. |
186
186
187
-
State kullanılarak oluşturulmuş bir sayaç düğmesi:
187
+
State kullanılarak oluşturulmuş bir sayaç buton'u:
188
188
189
189
<Sandpack>
190
190
@@ -254,21 +254,21 @@ function useRef(initialValue) {
254
254
255
255
İlk render sırasında, `useRef``{ current: initialValue }` döndürür. Bu nesne React tarafından saklanır, bu yüzden bir sonraki render sırasında aynı nesne döndürülür. Bu örnekte state ayarlama fonksiyonunun kullanılmadığına dikkat edin. Her zaman aynı nesneyi döndürmesi gerektiği için gereksizdir!
256
256
257
-
React `useRef`'i içinde sağladığı için, pratikte yeterince yaygındır. Fakat onu bir ayarlayıcı olmadan normal bir state değişkeni olarak düşünebilirsiniz. Nesne yönelimli programlamaya aşinaysanız, ref'ler size nesne değişkenlerini hatırlatabilir - fakat `this.something` yerine `somethingRef.current` yazarsınız.
257
+
Pratikte yeterince yaygın olduğu için, React `useRef`'i içinde sağlar. Fakat onu bir ayarlayıcı olmadan normal bir state değişkeni olarak düşünebilirsiniz. Nesne yönelimli programlamaya aşinaysanız, ref'ler size nesne değişkenlerini hatırlatabilir - fakat `this.something` yerine `somethingRef.current` yazarsınız.
258
258
259
259
</DeepDive>
260
260
261
261
## Ref'ler ne zaman kullanılmalıdır? {/*when-to-use-refs*/}
262
262
263
-
Genellikle, bileşeninizin React dışına çıkması ve harici API'lar (genellikle bileşenin görünümünü etkilemeyen bir tarayıcı API'si olabilir) ile iletişim kurması gerektiğinde bir ref kullanırsınız.
263
+
Genellikle, bileşeninizin React "dışına çıkması" ve harici API'lar (genellikle bileşenin görünümünü etkilemeyen bir tarayıcı API'si olabilir) ile iletişim kurması gerektiğinde bir ref kullanırsınız. İşte bu nadir durumlara birkaç örnek:
264
264
265
265
-[timeout ID'lerini](https://developer.mozilla.org/docs/Web/API/setTimeout) saklamak
266
266
-[DOM elemanlarını](https://developer.mozilla.org/docs/Web/API/Element) saklamak ve manipüle etmek. Bunu [bir sonraki sayfada](/learn/manipulating-the-dom-with-refs) ele alacağız.
267
267
- JSX'i hesaplamak için gerekli olmayan diğer nesneleri saklamak.
268
268
269
269
Eğer bileşeninizin bir değeri saklaması gerekiyorsa, ancak render mantığını etkilemiyorsa, ref'leri seçin.
270
270
271
-
## Ref'ler için en iyi uygulamalar {/*refler-için-en-iyi-uygulamalar*/}
271
+
## Ref'ler için en iyi pratikler {/*best-practices-for-refs*/}
272
272
273
273
Bu prensipleri takip etmek bileşenlerinizi daha öngörülebilir hale getirecektir:
274
274
@@ -283,7 +283,7 @@ ref.current = 5;
283
283
console.log(ref.current); // 5
284
284
```
285
285
286
-
Bunun nedeni **ref'in kendisi normal bir JavaScript nesnesi olması** ve öyle davranılmasıdır.
286
+
Bunun nedeni **ref'in kendisi normal bir JavaScript nesnesi olması** ve öyle davranılmasıdır.
287
287
288
288
289
289
Ayrıca bir ref ile çalışırken [mutasyondan kaçınmaya](/learn/updating-objects-in-state) gerek yoktur. Mutasyona uğrayan nesne render işlemi için kullanılmıyorsa, React ref veya içeriğiyle ne yaptığınızı umursamaz.
@@ -307,9 +307,9 @@ Bir ref'i herhangi bir değere işaret edecek şekilde ayarlayabilirsiniz. Fakat
#### Bozuk bir sohbet inputunu düzelt {/*fix-a-broken-chat-input*/}
311
311
312
-
Bir mesaj yazın ve "Gönder" düğmesine basın. "Gönderildi!" uyarısını görmek için üç saniye beklemeniz gerektiğini fark edeceksiniz. Bu gecikme sırasında "Geri Al" düğmesini görebilirsiniz. Ona tıklayın. Bu "Geri Al" düğmesinin "Gönderildi!" mesajının görünmesini durdurması gerekiyor. "Geri Al" düğmesi tıklandığında `handleSend` sırasında kaydedilen timeout ID ile [`clearTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout) çağrısı yapıyor. Ancak, "Geri Al" tıklandıktan sonra bile "Gönderildi!" mesajı hala görünüyor. Neden çalışmadığını bulun ve düzeltin.
312
+
Bir mesaj yazın ve "Gönder" butonunna basın. "Gönderildi!" uyarısını görmek için üç saniye beklemeniz gerektiğini fark edeceksiniz. Bu gecikme sırasında "Geri Al" butonunu görebilirsiniz. Ona tıklayın. Bu "Geri Al" butonunun "Gönderildi!" mesajının görünmesini durdurması gerekiyor. "Geri Al" butonuna tıklandığında `handleSend` sırasında kaydedilen timeout ID ile [`clearTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout) çağrısı yapıyor. Ancak, "Geri Al" tıklandıktan sonra bile "Gönderildi!" mesajı hala görünüyor. Neden çalışmadığını bulun ve düzeltin.
313
313
314
314
<Hint>
315
315
@@ -420,7 +420,7 @@ export default function Chat() {
420
420
421
421
#### Yeniden render edilemeyen bileşeni düzelt {/*fix-a-component-failing-to-re-render*/}
422
422
423
-
Bu düğme "Açık" ve "Kapalı" arasında geçiş yapmalıdır. Ancak her zaman "Kapalı" olarak gözüküyor. Bu kodda ne yanlış? Düzeltin.
423
+
Bu buton "Açık" ve "Kapalı" arasında geçiş yapmalıdır. Ancak her zaman "Kapalı" olarak gözüküyor. Bu kodda ne yanlış? Düzeltin.
424
424
425
425
<Sandpack>
426
426
@@ -444,7 +444,7 @@ export default function Toggle() {
444
444
445
445
<Solution>
446
446
447
-
Bu örnekte bir ref'in geçerli değeri render çıktısını hesaplamak için kullanılıyor: `{isOnRef.current ? 'Açık' : 'Kapalı'}`. Bu, bu bilginin bir ref'te olmaması gerektiğinin ve bunun yerine state'e konması gerektiğinin bir işaretidir. Düzeltmek için ref'i kaldırın ve yerine state kullanın:
447
+
Bu örnekte bir ref'in geçerli değeri render çıktısını hesaplamak için kullanılıyor: `{isOnRef.current ? 'Açık' : 'Kapalı'}`. Bu, ilgili bilginin bir ref'te olmaması gerektiğinin ve bunun yerine state'e konması gerektiğinin bir işaretidir. Düzeltmek için ref'i kaldırın ve yerine state kullanın:
448
448
449
449
<Sandpack>
450
450
@@ -470,15 +470,15 @@ export default function Toggle() {
470
470
471
471
#### Debouncing'i düzeltin {/*fix-debouncing*/}
472
472
473
-
Bu örnekte tüm düğme tıklama işleyicileri ["debounced"](https://redd.one/blog/debounce-vs-throttle). Bu ne anlama geldiğini görmek için bir düğmeye basın. Mesajın bir saniye sonra göründüğünü fark edeceksiniz. Mesajı beklerken düğmeye basarsanız, zamanlayıcı sıfırlanır. Yani aynı düğmeye hızlıca birkaç kez tıklamaya devam ederseniz, mesaj tıklamayı bıraktıktan bir saniye sonra görünecektir. Debouncing, kullanıcının "bir şeyler yapmayı durdurana kadar" bazı eylemleri geciktirmenizi sağlar.
473
+
Bu örnekte tüm buton tıklama işleyicileri ["debounce edilmiştir"](https://redd.one/blog/debounce-vs-throttle). Bunun ne anlama geldiğini görmek için bir butona basın. Mesajın bir saniye sonra göründüğünü fark edeceksiniz. Mesajı beklerken düğmeye basarsanız, zamanlayıcı sıfırlanır. Yani aynı düğmeye hızlıca birkaç kez tıklamaya devam ederseniz, mesaj tıklamayı bıraktıktan bir saniye sonra görünecektir. Debouncing, kullanıcının "bir şeyler yapmayı durdurana kadar" bazı eylemleri geciktirmenizi sağlar.
474
474
475
-
Örnek çalışıyor fakat tam olarak istenildiği gibi değil. Düğmeler bağımsız değil. Problemi görmek için bir düğmeye basın ve hemen başka bir düğmeye basın. Biraz bekledikten sonra her iki düğmenin de mesajını görmeyi beklersiniz. Fakat sadece son düğmenin mesajı görünüyor. İlk basılan düğmenin mesajı kayboluyor.
475
+
Örnek çalışıyor, fakat tam olarak istenildiği gibi değil. Butonlar birbirinden bağımsız değil. Problemi görmek için bir butona basın ve ardından hemen başka bir butona basın. Biraz bekledikten sonra her iki butonun de mesajını görmeyi beklersiniz. Fakat sadece son butonun mesajı görünüyor. İlk basılan butonun mesajı kayboluyor.
476
476
477
-
Neden düğmeler birbirlerine karışıyor? Sorunu bulun ve düzeltin.
477
+
Neden butonlar birbirini etkiliyor? Sorunu bulun ve düzeltin.
478
478
479
479
<Hint>
480
480
481
-
Son timout ID değişkeni tüm `DebouncedButton` bileşenleri arasında paylaşılıyor. Bu yüzden bir düğmeye basmak başka bir düğmenin zamanlayıcısını sıfırlıyor. Her düğmede ayrı bir timeout ID değişkeni saklayabilir misiniz?
481
+
Son timout ID değişkeni tüm `DebouncedButton` bileşenleri arasında paylaşılıyor. Bu yüzden bir butona basmak başka bir butonun zamanlayıcısını sıfırlıyor. Her butonda ayrı bir timeout ID değişkeni saklayabilir misiniz?
`timeoutId` değişkeni tüm bileşenler arasında paylaşılıyor. Bu yüzden ikinci düğmeye basmak ilk düğmenin bekleyen zamanlayıcısını sıfırlıyor. Bu sorunu çözmek için zamanlayıcıyı ref'te tutmalıyız. Her düğmenin kendi ref'i olacak, böylece birbirleriyle çakışmayacaklar. İki düğmeye hızlıca basarsanız, her ikisinin de mesajını göreceksiniz.
534
+
`timeoutId` değişkeni tüm bileşenler arasında paylaşılıyor. Bu yüzden ikinci butona basmak ilk butonun bekleyen zamanlayıcısını sıfırlıyor. Bu sorunu çözmek için zamanlayıcıyı ref'te tutmalıyız. Her butonun kendi ref'i olacak, böylece birbirleriyle çakışmayacaklar. Dikkat ederseniz, iki butona hızlıca basmak her ikisinin de mesajını gösterecektir.
0 commit comments