Skip to content

Commit 5b9f893

Browse files
committed
docs: translate reusing logic
1 parent c4ad4ec commit 5b9f893

File tree

1 file changed

+39
-37
lines changed

1 file changed

+39
-37
lines changed

src/content/learn/reusing-logic-with-custom-hooks.md

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ Bu isimlendirme kurallarına uymalısınız:
224224
1. **React bileşenleri büyük harfle başlamalıdır,** `StatusBar` ve `SaveButton` gibi. React bileşenleri ayrıca, JSX gibi, React'in nasıl görüntüleyeceğini bildiği bir şey döndürmelidir.
225225
2. **Hook isimleri `use` ile başlayıp büyük harfle devam etmelidir,** [`useState`](/reference/react/useState) (yerleşik) veya `useOnlineStatus` (özel, yukarıdaki örnekte olduğu gibi). Hook'lar keyfi değerler döndürebilir.
226226

227-
Bu kural, sizin bir bileşene her baktığınızda onun state, efektleri ve diğer React özelliklerinin nerede "saklanabileceğini" bilmenizi garanti eder. Örneğin, bileşeninizde `getColor()` fonksiyonu çağrısı görürseniz, adının `use` ile başlamadığı için içinde React state'i içeremeyeceğinden emin olabilirsiniz. Ancak, `useOnlineStatus()` gibi bir fonksiyon çağrısı büyük olasılıkla içinde başka Hook'lara çağrı içerecektir!
227+
Bu kural, sizin bir bileşene her baktığınızda onun state, Efekt'leri ve diğer React özelliklerinin nerede "saklanabileceğini" bilmenizi garanti eder. Örneğin, bileşeninizde `getColor()` fonksiyonu çağrısı görürseniz, adının `use` ile başlamadığı için içinde React state'i içeremeyeceğinden emin olabilirsiniz. Ancak, `useOnlineStatus()` gibi bir fonksiyon çağrısı büyük olasılıkla içinde başka Hook'lara çağrı içerecektir!
228228

229229
<Note>
230230

@@ -325,7 +325,7 @@ function SaveButton() {
325325
}
326326
```
327327

328-
Bunlar tamamen bağımsız iki state değişkenleri ve efektlerdir! Onlar rastlantısal olarak aynı anda aynı değere sahip oldular çünkü onları aynı harici değerle (ağın açık olup olmaması) senkronize ettiniz.
328+
Bunlar tamamen bağımsız iki state değişkenleri ve Efekt'lerdir! Onlar rastlantısal olarak aynı anda aynı değere sahip oldular çünkü onları aynı harici değerle (ağın açık olup olmaması) senkronize ettiniz.
329329

330330
Bunu daha iyi canlandırabilmek adına, farklı bir örnek kullanacağız. Bu `Form` bileşenini ele alın:
331331

@@ -599,9 +599,9 @@ button { margin-left: 10px; }
599599
600600
</Sandpack>
601601
602-
`serverUrl` ya da `roomId`'yi değiştirdiğinizde, efekt [değişikliklerinize "tepki verir"](/learn/lifecycle-of-reactive-effects#effects-react-to-reactive-values) ve yeniden senkronize olur. Konsol mesajlarından, efekt'in bağlı olduğu değerleri her değiştirdiğinizde sohbetin yeniden bağlandığını görebilirsiniz.
602+
`serverUrl` ya da `roomId`'yi değiştirdiğinizde, Efekt [değişikliklerinize "tepki verir"](/learn/lifecycle-of-reactive-effects#effects-react-to-reactive-values) ve yeniden senkronize olur. Konsol mesajlarından, Efekt'in bağlı olduğu değerleri her değiştirdiğinizde sohbetin yeniden bağlandığını görebilirsiniz.
603603
604-
Şimdi efekt'in kodunu özel bir Hook'a taşıyın:
604+
Şimdi Efekt'in kodunu özel bir Hook'a taşıyın:
605605
606606
```js {2-13}
607607
export function useChatRoom({ serverUrl, roomId }) {
@@ -833,7 +833,7 @@ export default function ChatRoom({ roomId }) {
833833
// ...
834834
```
835835
836-
`ChatRoom` bileşeniniz her yeniden render edildiğinde, `roomId` ve `serverUrl`'in son hallerini Hook'unuza verir. Bu, bir yeniden render'dan sonra değerleri her değiştikten sonra Efekt'inizin sohbete yeniden bağlanmasının nedenidir. (Eğer önceden ses ya da video işleme yazılımı ile uğraştıysanız, Hook'ları bu şekilde zincirlemek size görsel ya da ses efektlerini zincirlemeyi hatırlatabilir. Adeta `useState`'in çıktısı `useChatRoom`'un girdisine "besleniyor" gibi.)
836+
`ChatRoom` bileşeniniz her yeniden render edildiğinde, `roomId` ve `serverUrl`'in son hallerini Hook'unuza verir. Bu, bir yeniden render'dan sonra değerleri her değiştikten sonra Efekt'inizin sohbete yeniden bağlanmasının nedenidir. (Eğer önceden ses ya da video işleme yazılımı ile uğraştıysanız, Hook'ları bu şekilde zincirlemek size görsel ya da ses Efektlerini zincirlemeyi hatırlatabilir. Adeta `useState`'in çıktısı `useChatRoom`'un girdisine "besleniyor" gibi.)
837837
838838
### Olay yöneticilerini özel Hook'lara geçirme {/*passing-event-handlers-to-custom-hooks*/}
839839
@@ -1411,9 +1411,9 @@ function SaveButton() {
14111411

14121412
Efektleri özel hook'lara sarmanın genellikle faydalı olmasının başka bir nedeni budur:
14131413
1414-
1. Efektlerinizin içine ve efektlerinizden dışarı akan veriyi oldukça belirgin hale getirirsiniz.
1414+
1. Efektlerinizin içine ve Efekt'lerinizden dışarı akan veriyi oldukça belirgin hale getirirsiniz.
14151415
2. Bileşenlerinizin, Efektlerinizin nasıl çalıştığından ziyade ne yapmak istediğine odaklanmasını sağlarsınız.
1416-
3. React yeni özellikler eklediğinde, bu efektleri bileşenlerinizde herhangi bir değişiklik yapmadan kaldırabilirsiniz.
1416+
3. React yeni özellikler eklediğinde, bu Efekt'leri bileşenlerinizde herhangi bir değişiklik yapmadan kaldırabilirsiniz.
14171417
14181418
Bir [tasarım sistemine](https://uxdesign.cc/everything-you-need-to-know-about-design-systems-54b109851969) benzer olarak, uygulamanızdaki bileşenlerde bulunan ortak kalıpları özel hook'lara çıkartmaya başlamayı faydalı bulabilirsiniz. Bu, bileşenlerinizin kodunu niyete odaklı tutar ve sık sık ham Efektler yazmaktan kaçınmanızı sağlar. Pek çok muazzam özel hook'lar React topluluğu tarafından sürdürülmektedir.
14191419
@@ -2068,9 +2068,9 @@ export function useCounter(delay) {
20682068
20692069
</Solution>
20702070
2071-
#### Extract `useInterval` out of `useCounter` {/*extract-useinterval-out-of-usecounter*/}
2071+
#### `useInterval`'i `useCounter`'dan çıkarın {/*extract-useinterval-out-of-usecounter*/}
20722072
2073-
Currently, your `useCounter` Hook does two things. It sets up an interval, and it also increments a state variable on every interval tick. Split out the logic that sets up the interval into a separate Hook called `useInterval`. It should take two arguments: the `onTick` callback, and the `delay`. After this change, your `useCounter` implementation should look like this:
2073+
Şu an, `useCounter` Hook'unuz iki şey yapıyor, bir interval kuruyor ve aynı zamanda her interval tikinde bir state değişkenini artırıyor. Interval'i kuran mantığı `useInterval` adında ayrı bir Hook'a ayırın. Bu Hook, iki argüman almalıdır: `onTick` callback'i ve `delay`. Bu değişiklikten sonra, `useCounter` uygulamanız şu şekilde olmalıdır:
20742074
20752075
```js
20762076
export function useCounter(delay) {
@@ -2082,7 +2082,7 @@ export function useCounter(delay) {
20822082
}
20832083
```
20842084
2085-
Write `useInterval` in the `useInterval.js` file and import it into the `useCounter.js` file.
2085+
`useInterval`'i `useInterval.js` dosyasının içine yazın ve onu `useCounter.js` dosyasında içe aktarın.
20862086
20872087
<Sandpack>
20882088
@@ -2092,7 +2092,7 @@ import { useCounter } from './useCounter.js';
20922092

20932093
export default function Counter() {
20942094
const count = useCounter(1000);
2095-
return <h1>Seconds passed: {count}</h1>;
2095+
return <h1>Geçen saniyeler: {count}</h1>;
20962096
}
20972097
```
20982098
@@ -2112,14 +2112,14 @@ export function useCounter(delay) {
21122112
```
21132113
21142114
```js src/useInterval.js
2115-
// Write your Hook here!
2115+
// Hook'unuzu bu dosyaya yazın!
21162116
```
21172117
21182118
</Sandpack>
21192119
21202120
<Solution>
21212121
2122-
The logic inside `useInterval` should set up and clear the interval. It doesn't need to do anything else.
2122+
`useInterval` içindeki mantık, interval'i kurmalı ve temizlemelidir. Başka bir şey yapmasına gerek yoktur.
21232123
21242124
<Sandpack>
21252125
@@ -2128,7 +2128,7 @@ import { useCounter } from './useCounter.js';
21282128

21292129
export default function Counter() {
21302130
const count = useCounter(1000);
2131-
return <h1>Seconds passed: {count}</h1>;
2131+
return <h1>Geçen saniyeler: {count}</h1>;
21322132
}
21332133
```
21342134
@@ -2158,36 +2158,38 @@ export function useInterval(onTick, delay) {
21582158
21592159
</Sandpack>
21602160
2161-
Note that there is a bit of a problem with this solution, which you'll solve in the next challenge.
2161+
Bu çözümde biraz bir sorun olduğuna dikkat edin, bunu bir sonraki bölümde çözeceksiniz.
21622162
21632163
</Solution>
21642164
2165-
#### Fix a resetting interval {/*fix-a-resetting-interval*/}
2165+
#### Interval'i sıfırlamayı çözün {/*fix-a-resetting-interval*/}
21662166
2167-
In this example, there are *two* separate intervals.
2167+
Bu örnekte, *iki* ayrı interval var.
21682168
2169-
The `App` component calls `useCounter`, which calls `useInterval` to update the counter every second. But the `App` component *also* calls `useInterval` to randomly update the page background color every two seconds.
2169+
`App` bileşeni `useCounter`'ı çağırıyor, o da sayacı her saniye arttırmak için `useInterval`'i çağırıyor. Ama `App` bileşeni *aynı zamanda* her iki saniyede bir sayfa arka plan rengini rastgele güncellemek için de `useInterval`'i çağırıyor.
21702170
21712171
For some reason, the callback that updates the page background never runs. Add some logs inside `useInterval`:
21722172
2173+
Bir sebepten ötürü, sayfa arka planını güncelleyen callback hiç çalışmıyor. `useInterval` içerisine bazı loglar ekleyin:
2174+
21732175
```js {2,5}
21742176
useEffect(() => {
2175-
console.log('Setting up an interval with delay ', delay)
2177+
console.log('Delayli bir interval kuruluyor ', delay)
21762178
const id = setInterval(onTick, delay);
21772179
return () => {
2178-
console.log('Clearing an interval with delay ', delay)
2180+
console.log('Delayli bir interval temizleniyor ', delay)
21792181
clearInterval(id);
21802182
};
21812183
}, [onTick, delay]);
21822184
```
21832185
2184-
Do the logs match what you expect to happen? If some of your Effects seem to re-synchronize unnecessarily, can you guess which dependency is causing that to happen? Is there some way to [remove that dependency](/learn/removing-effect-dependencies) from your Effect?
2186+
Log'lar olacağını düşündüğünüz şeyle uyuşuyor mu? Eğer bazı Efekt'leriniz gereksiz yere yeniden senkronize oluyorsa, bunun hangi dependency'den dolayı olduğunu tahmin edebilir misiniz? Efekt'inizden [bu dependency'yi kaldırabileceğiniz](/learn/removing-effect-dependencies) bir yol var mı?
21852187
2186-
After you fix the issue, you should expect the page background to update every two seconds.
2188+
Bu sorunu çözdükten sonra, sayfa arka planının her iki saniyede bir güncellendiğini görmelisiniz.
21872189
21882190
<Hint>
21892191
2190-
It looks like your `useInterval` Hook accepts an event listener as an argument. Can you think of some way to wrap that event listener so that it doesn't need to be a dependency of your Effect?
2192+
Görünen o ki `useInterval` Hook'unuz argüman olarak bir olay dinleyicisi alıyor. Bu olay dinleyicisini Efekt'iniz için bir dependency olmaya ihtiyaç duymadan nasıl sarabileceğinizi düşünebilir misiniz?
21912193
21922194
</Hint>
21932195
@@ -2221,7 +2223,7 @@ export default function Counter() {
22212223
document.body.style.backgroundColor = randomColor;
22222224
}, 2000);
22232225

2224-
return <h1>Seconds passed: {count}</h1>;
2226+
return <h1>Geçen saniyeler: {count}</h1>;
22252227
}
22262228
```
22272229
@@ -2256,11 +2258,11 @@ export function useInterval(onTick, delay) {
22562258
22572259
<Solution>
22582260
2259-
Inside `useInterval`, wrap the tick callback into an Effect Event, as you did [earlier on this page.](/learn/reusing-logic-with-custom-hooks#passing-event-handlers-to-custom-hooks)
2261+
`useInterval`'in içerisinde, tik callback'ini bir Efekt olayına [bu sayfada daha önce yaptığınız gibi](/learn/reusing-logic-with-custom-hooks#passing-event-handlers-to-custom-hooks) sarın
22602262
2261-
This will allow you to omit `onTick` from dependencies of your Effect. The Effect won't re-synchronize on every re-render of the component, so the page background color change interval won't get reset every second before it has a chance to fire.
2263+
Bu sizin `onTick`'i Efekt'iniz için bir dependency olmaktan çıkarmanıza olanak tanır. Efekt, bileşeniniz her yeniden renderlandığında tekrar senkronie olmayacak, böylece sayfa arka plan rengi değişim interval'i her saniye çalışmaya şans bulamadan sıfırlanmamış olacak.
22622264
2263-
With this change, both intervals work as expected and don't interfere with each other:
2265+
Bu değişiklikle birlikte, her iki interval de beklediğiniz gibi çalışır ve birbirleriyle etkileşime girmezler:
22642266
22652267
<Sandpack>
22662268
@@ -2327,21 +2329,21 @@ export function useInterval(callback, delay) {
23272329
23282330
</Solution>
23292331
2330-
#### Implement a staggering movement {/*implement-a-staggering-movement*/}
2332+
#### Gecikmelendirilmiş bir hareketi uygulayın {/*implement-a-staggered-movement*/}
23312333
2332-
In this example, the `usePointerPosition()` Hook tracks the current pointer position. Try moving your cursor or your finger over the preview area and see the red dot follow your movement. Its position is saved in the `pos1` variable.
2334+
Bu örnekte, `usePointerPosition()` Hook'u mevcut imleç konumunu takip eder. İmlecinizi veya parmağınızı önizleme alanı üzerinde hareket ettirmeyi deneyin ve kırmızı noktanın hareketinizi takip ettiğini görün. Noktanın konumu `pos1` değişkeninde saklanır.
23332335
2334-
In fact, there are five (!) different red dots being rendered. You don't see them because currently they all appear at the same position. This is what you need to fix. What you want to implement instead is a "staggered" movement: each dot should "follow" the previous dot's path. For example, if you quickly move your cursor, the first dot should follow it immediately, the second dot should follow the first dot with a small delay, the third dot should follow the second dot, and so on.
2336+
Aslında, render edilen beş (!) farklı kırmızı nokta var. Onları görmüyorsunuz çünkü şu anda hepsi aynı konumda görünüyor. Bu sorunu çözmeniz gerekiyor. Bunun yerine uygulamak istediğiniz şey "gecikmeli" bir hareket: her nokta bir önceki noktanın yolunu "takip" etmeli. Örneğin hızlıca imlecinizi hareket ettirirseniz, ilk nokta onu hemen takip etmeli, ikinci nokta ilk noktayı küçük bir gecikme ile takip etmeli, üçüncü nokta ikinci noktayı takip etmeli ve böyle devam etmeli.
23352337
2336-
You need to implement the `useDelayedValue` custom Hook. Its current implementation returns the `value` provided to it. Instead, you want to return the value back from `delay` milliseconds ago. You might need some state and an Effect to do this.
2338+
`useDelayedValue` özel Hook'unu yazmanız gerekiyor. Mevcut uygulama, ona sağlanan `value`'yu döndürmekte. Bunun yerine, `delay` kadar milisaniye önceki değeri döndürmek istemektesiniz. Bu işlemi yapmak için biraz state ve bir Efekt'e ihtiyacınız olabilir.
23372339
2338-
After you implement `useDelayedValue`, you should see the dots move following one another.
2340+
`useDelayedValue`'u yazdıktan sonra, noktaların birbirlerini takip ettiğini görmelisiniz.
23392341
23402342
<Hint>
23412343
2342-
You'll need to store the `delayedValue` as a state variable inside your custom Hook. When the `value` changes, you'll want to run an Effect. This Effect should update `delayedValue` after the `delay`. You might find it helpful to call `setTimeout`.
2344+
`delayedValue`'yu bir özel Hook'unuzun içinde bir state değişkeni olarak saklamanız gerekmekte. `value` değiştiğinde, bir Efekt çalıştırmak isteyeceksiniz. Bu Efekt, `delay`'den sonra `delayedValue`'yu güncellemelidir. `setTimeout`'u çağırmak size yardımcı olabilir.
23432345
2344-
Does this Effect need cleanup? Why or why not?
2346+
Bu Efekt'in cleanup'a ihtiyacı var mı? Varsa neden, yoksa neden?
23452347
23462348
</Hint>
23472349
@@ -2351,7 +2353,7 @@ Does this Effect need cleanup? Why or why not?
23512353
import { usePointerPosition } from './usePointerPosition.js';
23522354

23532355
function useDelayedValue(value, delay) {
2354-
// TODO: Implement this Hook
2356+
// TODO: Bu Hook'u yazın
23552357
return value;
23562358
}
23572359

@@ -2414,7 +2416,7 @@ body { min-height: 300px; }
24142416
24152417
<Solution>
24162418
2417-
Here is a working version. You keep the `delayedValue` as a state variable. When `value` updates, your Effect schedules a timeout to update the `delayedValue`. This is why the `delayedValue` always "lags behind" the actual `value`.
2419+
Burada çalışan bir versiyonu var. `delayedValue`'yu bir state değişkeni olarak saklıyorsunuz. `value` güncellendiğinde, Efekt'iniz `delayedValue`'yu güncellemek için bir timeout planlar. Bu yüzden `delayedValue` her zaman gerçek `value`'dan "geride kalır".
24182420
24192421
<Sandpack>
24202422
@@ -2491,7 +2493,7 @@ body { min-height: 300px; }
24912493
24922494
</Sandpack>
24932495
2494-
Note that this Effect *does not* need cleanup. If you called `clearTimeout` in the cleanup function, then each time the `value` changes, it would reset the already scheduled timeout. To keep the movement continuous, you want all the timeouts to fire.
2496+
Bu Efekt'in cleanup'a ihtiyacı *olmadığını* unutmayın. Eğer cleanup fonksiyonunda `clearTimeout`'u çağırdıysanız, o zaman her `value` değiştiğinde, zaten planlanmış olan timeout'u sıfırlar. Hareketi sürekli tutmak için, tüm timeout'ların çalışmasını istersiniz.
24952497
24962498
</Solution>
24972499

0 commit comments

Comments
 (0)