From 6f80eaf956720738e556ad0d99bd4f00672507ea Mon Sep 17 00:00:00 2001 From: serkanisyapan Date: Wed, 8 Nov 2023 11:00:42 +0300 Subject: [PATCH] translate synchronizing with effects --- .../learn/synchronizing-with-effects.md | 576 +++++++++--------- 1 file changed, 288 insertions(+), 288 deletions(-) diff --git a/src/content/learn/synchronizing-with-effects.md b/src/content/learn/synchronizing-with-effects.md index 24b9f9eb1..59008a8ad 100644 --- a/src/content/learn/synchronizing-with-effects.md +++ b/src/content/learn/synchronizing-with-effects.md @@ -1,97 +1,97 @@ --- -title: 'Synchronizing with Effects' +title: "Efektler ile Senkronize Etme" --- -Some components need to synchronize with external systems. For example, you might want to control a non-React component based on the React state, set up a server connection, or send an analytics log when a component appears on the screen. *Effects* let you run some code after rendering so that you can synchronize your component with some system outside of React. +Bazı bileşenler harici sistemler ile senkronize olmalıdır. Örneğin, React state'ine göre React olmayan bir bileşeni kontrol etmek, bir sunucu bağlantısı kurmak veya bir bileşen ekranda göründüğünde analiz bilgisi göndermek isteyebilirsiniz. *Efektler*, bileşeninizi bazı React dışı sistemler ile senkronize etmenizi sağlamak için bazı kodları render işleminden sonra çalıştırır. -- What Effects are -- How Effects are different from events -- How to declare an Effect in your component -- How to skip re-running an Effect unnecessarily -- Why Effects run twice in development and how to fix them +- Efektler nelerdir +- Efektler olaylardan nasıl farklıdır +- Bileşeninizde nasıl Efekt bildirirsiniz +- Efekti gereksiz olarak yeniden çalıştırmaktan nasıl kaçınırsınız +- Efektler geliştirme sırasında neden iki kere çalışır ve bunu nasıl düzeltiriz -## What are Effects and how are they different from events? {/*what-are-effects-and-how-are-they-different-from-events*/} +## Efektler nedir ve olaylardan nasıl farklıdırlar? {/*what-are-effects-and-how-are-they-different-from-events*/} -Before getting to Effects, you need to be familiar with two types of logic inside React components: +Efektlere başlamadan önce React bileşenleri içindeki iki tip mantığa aşina olmalısınız: -- **Rendering code** (introduced in [Describing the UI](/learn/describing-the-ui)) lives at the top level of your component. This is where you take the props and state, transform them, and return the JSX you want to see on the screen. [Rendering code must be pure.](/learn/keeping-components-pure) Like a math formula, it should only _calculate_ the result, but not do anything else. +- **Kodun render edilmesi** ([Describing the UI](/learn/describing-the-ui) başlığında bahsedildi) bileşeninizin en üst seviyesindedir. Burası prop'ları ve state'i aldığınız, onları dönüştürdüğünüz ve ekranda görmek istediğiniz JSX'i döndürdüğünüz yerdir. [Kodu render etmek saf olmak zorundadır.](/learn/keeping-components-pure) Bir matematik formülünde olduğu gibi sadece sonucu _hesaplamalı_ ve başka hiçbir şey yapmamalıdır. -- **Event handlers** (introduced in [Adding Interactivity](/learn/adding-interactivity)) are nested functions inside your components that *do* things rather than just calculate them. An event handler might update an input field, submit an HTTP POST request to buy a product, or navigate the user to another screen. Event handlers contain ["side effects"](https://en.wikipedia.org/wiki/Side_effect_(computer_science)) (they change the program's state) caused by a specific user action (for example, a button click or typing). +- **Olay yöneticileri** ([Adding Interactivity](/learn/adding-interactivity) başlığında bahsedildi) bileşeniniz içinde sadece hesaplama yapmak yerine bir şeyler *yapan* iç içe fonksiyonlardır. Bir olay yöneticisi input alanını güncelleyebilir, bir ürünü satılan almak için HTTP POST isteği gönderebilir ya da kullanıcıyı başka bir ekrana yönlendirebilir. Olay yöneticileri, belirli bir kullanıcı eyleminin (örneğin bir butana tıklamak ya da yazmak) ["yan etkiler"](https://en.wikipedia.org/wiki/Side_effect_(computer_science)) içerirler (programın state'ini değiştirirler). -Sometimes this isn't enough. Consider a `ChatRoom` component that must connect to the chat server whenever it's visible on the screen. Connecting to a server is not a pure calculation (it's a side effect) so it can't happen during rendering. However, there is no single particular event like a click that causes `ChatRoom` to be displayed. +Bazen bu yeterli değildir. Ekranda göründüğünde sohbet sunucusuna bağlanmak zorunda olan bir `ChatRoom` bileşenini ele alalım. Bir sunucuya bağlanmak saf bir hesaplama değildir (bir yan etkidir) bu yüzden render etme sırasında yapılamaz. Ancak, `ChatRoom`'un ekranda görüntülenmesine neden olan tıklama gibi belirli bir olay yoktur. -***Effects* let you specify side effects that are caused by rendering itself, rather than by a particular event.** Sending a message in the chat is an *event* because it is directly caused by the user clicking a specific button. However, setting up a server connection is an *Effect* because it should happen no matter which interaction caused the component to appear. Effects run at the end of a [commit](/learn/render-and-commit) after the screen updates. This is a good time to synchronize the React components with some external system (like network or a third-party library). +***Efektler*, belirli bir olaydan ziyade render etmenin kendisinden kaynaklanan yan etkileri belirtmenizi sağlar.** Sohbete mesaj göndermek bir *olaydır* çünkü direkt olarak kullanıcının belirli bir butona tıklaması ile gerçekleşir. Ancak, bir sunucu bağlantısı kurmak *Efekttir* çünkü bileşenin ekranda görünmesine neden olan etkileşim ne olursa olsun gerçekleşmesi gerekir. Efektler ekran güncellendikten sonra [işlemenin (commit)](/learn/render-and-commit) sonunda çalışır. Bu, React bileşenlerini bazı harici sistemlerle (ağ veya üçüncü parti kütüphane ile) senkronize etmek için iyi bir zamandır. -Here and later in this text, capitalized "Effect" refers to the React-specific definition above, i.e. a side effect caused by rendering. To refer to the broader programming concept, we'll say "side effect". +Burada ve daha sonra bu metinde, büyük harflerle yazılan "Efekt", yukarıdaki React'e özgü tanıma atıfta bulunur, örneğin render etmenin neden olduğu bir yan etki. Daha geniş programlama konseptine atıfta bulunmak için "yan etki" ifadesini kullanacağız. -## You might not need an Effect {/*you-might-not-need-an-effect*/} +## Bir Efekte ihtiyacınız olmayabilir {/*you-might-not-need-an-effect*/} -**Don't rush to add Effects to your components.** Keep in mind that Effects are typically used to "step out" of your React code and synchronize with some *external* system. This includes browser APIs, third-party widgets, network, and so on. If your Effect only adjusts some state based on other state, [you might not need an Effect.](/learn/you-might-not-need-an-effect) +**Bileşenlerinize Efekt eklemekte acele etmeyin.** Efektlerin genel olarak React kodununuzun "dışına çıkmakta" ve bazı *harici* sistemler ile senkronize etmekte kullanıldığı aklınızda olsun. Bu tarayıcı API'larını, üçüncü parti widget'ları, ağları ve diğer şeyleri içerir. Efektiniz yalnızca bazı state'leri başka bir state'e göre ayarlıyorsa, [bir Efekte ihtiyacınız olmayabilir.](/learn/you-might-not-need-an-effect) -## How to write an Effect {/*how-to-write-an-effect*/} +## Efekt nasıl yazılır {/*how-to-write-an-effect*/} -To write an Effect, follow these three steps: +Bir Efekt yazmak için aşağıdaki üç adımı takip edin: -1. **Declare an Effect.** By default, your Effect will run after every render. -2. **Specify the Effect dependencies.** Most Effects should only re-run *when needed* rather than after every render. For example, a fade-in animation should only trigger when a component appears. Connecting and disconnecting to a chat room should only happen when the component appears and disappears, or when the chat room changes. You will learn how to control this by specifying *dependencies.* -3. **Add cleanup if needed.** Some Effects need to specify how to stop, undo, or clean up whatever they were doing. For example, "connect" needs "disconnect", "subscribe" needs "unsubscribe", and "fetch" needs either "cancel" or "ignore". You will learn how to do this by returning a *cleanup function*. +1. **Bir Efekt bildirin.** Varsayılan olarak, Efektiniz her render'dan sonra çalışacaktır. +2. **Efektin bağımlılıklarını belirtin.** Çoğu Efekt her render yerine yalnızca *gerektiğinde* yeniden çalışmalıdır. Örneğin, bir solma animasyonu yalnızca bileşen göründüğünde tetiklenmelidir. Bir sohbet odasına bağlanmak ya da bağlantıyı koparmak yalnızca bileşen göründüğünde ve kaybolduğunda ya da sohbet odası değiştiğinde olmalıdır. *Bağımlılıkları* belirterek bunu nasıl kontrol edeceğinizi öğreneceksiniz. +3. **Gerekliyse temizleme (cleanup) ekleyin.** Bazı Efektlerin, yaptıkları her şeyi nasıl durduracaklarını, geri alacaklarını veya temizleyeceklerini belirtmeleri gerekir. Örneğin, "bağlanmak" "bağlantıyı kese" ihtiyaç duyar, "abone ol" "abonelikten çıka" ihtiyaç duyar ve "veri getirme (fetch)" ya "iptal" ya da "görmezden gele" ihtiyaç duyar. Bir *temizleme fonksiyonu* döndürerek bunu nasıl yapacağınızı öğreneceksiniz. -Let's look at each of these steps in detail. +Gelin her bir adıma detaylı bir şekilde bakalım. -### Step 1: Declare an Effect {/*step-1-declare-an-effect*/} +### 1. Adım: Bir Efekt bildirin {/*step-1-declare-an-effect*/} -To declare an Effect in your component, import the [`useEffect` Hook](/reference/react/useEffect) from React: +Bileşeninizde bir Efekt bildirmek için [`useEffect` Hook'unu](/reference/react/useEffect) içe aktarın: ```js import { useEffect } from 'react'; ``` -Then, call it at the top level of your component and put some code inside your Effect: +Daha sonra, bileşeninizin üst seviyesinde çağırın ve Efektiniz içine kodunuzu yazın: ```js {2-4} function MyComponent() { useEffect(() => { - // Code here will run after *every* render + // Buradaki kod *her* render'dan sonra çalışır }); return
; } ``` -Every time your component renders, React will update the screen *and then* run the code inside `useEffect`. In other words, **`useEffect` "delays" a piece of code from running until that render is reflected on the screen.** +Bileşeniniz her render edildiğinde, React ekranı güncelleyecektir *ve sonra* `useEffect` içindeki kodu çalıştıracaktır. Diğer bir deyişle, **`useEffect` bir kod parçasının çalışmasını o render işlemi ekrana yansıtılana kadar "geciktirir".** -Let's see how you can use an Effect to synchronize with an external system. Consider a `` React component. It would be nice to control whether it's playing or paused by passing an `isPlaying` prop to it: +Harici bir sistemle senkronize etmek için Efekti nasıl kullanacağımızı görelim. Bir `` React bileşeni düşünün. Bu bileşene `isPlaying` prop'u ileterek videonun çalıyor mu yoksa duraklatılmış mı olduğunu kontrol etmek güzel olurdu: ```js ; ``` -Your custom `VideoPlayer` component renders the built-in browser [`