diff --git a/src/content/learn/synchronizing-with-effects.md b/src/content/learn/synchronizing-with-effects.md
index 1eec63388..171ef95ba 100644
--- a/src/content/learn/synchronizing-with-effects.md
+++ b/src/content/learn/synchronizing-with-effects.md
@@ -1,97 +1,98 @@
---
-title: 'Synchronizing with Effects'
+title: 'Синхронізація з ефектами'
---
-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.
+Деякі компоненти потребують синхронізації із зовнішніми системами. Наприклад, ви можете захотіти керувати компонентом, який не є React-компонентом, відповідно до стану React, налаштувати з’єднання із сервером або надіслати лог до системи аналітики, коли компонент з’являється на екрані. *Ефекти* дають змогу виконати певний код після рендерингу, щоб синхронізувати компонент з певною системою поза React.
+
-- 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
+- Що таке ефекти
+- Чим ефекти відрізняються від подій
+- Як оголосити ефект у своєму компоненті
+- Як уникнути непотрібного повторного запуску ефекту
+- Чому в режимі розробки ефекти запускаються двічі та як це виправити
-## What are Effects and how are they different from events? {/*what-are-effects-and-how-are-they-different-from-events*/}
+## Що таке ефекти та чим вони відрізняються від подій? {/*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:
+Перш ніж перейти до ефектів, вам потрібно ознайомитися з двома типами логіки всередині React-компонентів:
-- **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.
+- **Код рендерингу** (представлено в розділі [Написання UI](/learn/describing-the-ui)) розміщується на верхньому рівні вашого компонента. Саме тут ви берете пропси та стейт, опрацьовуєте їх і повертаєте JSX, який хочете побачити на екрані. [Код рендерингу має бути чистим.](/learn/keeping-components-pure) Як і математична формула, він має лише _обчислювати_ результат, і не робити нічого іншого.
-- **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).
+- **Обробники подій** (представлено в розділі [Додавання інтерактивності](/learn/adding-interactivity)) — це вкладені функції всередині ваших компонентів, які *виконують дії*, а не просто обчислюють результат. Обробник події може оновити поле введення, надіслати HTTP POST-запит для придбання товару або перенаправити користувача на інший екран. Обробники подій містять ["побічні ефекти"](https://en.wikipedia.org/wiki/Side_effect_(computer_science)) (вони змінюють стан програми), спричинені конкретною дією користувача (наприклад, натисканням кнопки або введенням тексту).
-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.
+Іноді цього недостатньо. Розглянемо компонент `ChatRoom`, який має під’єднуватися до чат-сервера щоразу, коли він відображається на екрані. Під’єднання до сервера не є чистим обчисленням (це побічний ефект), тому воно не може відбуватися під час рендерингу. Водночас немає якоїсь однієї конкретної події, наприклад натискання кнопки, яка спричиняє відображення `ChatRoom`.
-***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).
+***Ефекти* дають змогу вказати побічні ефекти, спричинені самим рендерингом, а не певною подією.** Надсилання повідомлення в чаті є *подією*, оскільки безпосередньо спричинене натисканням користувачем певної кнопки. Натомість встановлення з’єднання із сервером є *ефектом*, оскільки воно має відбуватися незалежно від того, яка взаємодія спричинила появу компонента. Ефекти виконуються наприкінці [коміту](/learn/render-and-commit), після оновлення екрана. Це вдалий момент для синхронізації React-компонентів із певною зовнішньою системою (наприклад, мережею або сторонньою бібліотекою).
-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".
+Тут і далі в цьому тексті "Ефект" з великої літери означає наведене вище специфічне для React поняття, тобто побічний ефект, спричинений рендерингом. Для позначення ширшого поняття в програмуванні ми використовуватимемо термін "побічний ефект".
-## You might not need an Effect {/*you-might-not-need-an-effect*/}
+## Можливо, вам не потрібен Ефект {/*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)
+**Не поспішайте додавати Ефекти до своїх компонентів.** Пам’ятайте, що Ефекти зазвичай використовуються, щоб "вийти за межі" вашого коду React і синхронізуватися з певною *зовнішньою* системою. До них належать API браузера, сторонні віджети, мережа тощо. Якщо ваш Ефект лише коригує один стан на основі іншого стану, [можливо, вам не потрібен Ефект.](/learn/you-might-not-need-an-effect)
-## How to write an Effect {/*how-to-write-an-effect*/}
+## Як писати Ефект {/*how-to-write-an-effect*/}
-To write an Effect, follow these three steps:
+Щоб написати Ефект, виконайте три кроки:
-1. **Declare an Effect.** By default, your Effect will run after every [commit](/learn/render-and-commit).
-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. **Оголосіть Ефект.** За замовчуванням ваш Ефект запускатиметься після кожного [коміту](/learn/render-and-commit).
+2. **Вкажіть залежності Ефекту.** Більшість Ефектів мають запускатися повторно лише *за потреби*, а не після кожного рендерингу. Наприклад, анімація появи має запускатися лише тоді, коли компонент з’являється. Під’єднання до чат-кімнати та відключення від неї має відбуватися лише тоді, коли компонент з’являється або зникає, або коли змінюється чат-кімната. Ви дізнаєтеся, як контролювати це, вказуючи *залежності*.
+3. **Додайте очищення, якщо це потрібно.** Для деяких Ефектів потрібно визначити, як зупинити, скасувати або очистити те, що вони робили. Наприклад, для "connect" потрібен "disconnect", для "subscribe" — "unsubscribe", а для "fetch" — або "cancel", або "ignore". Ви дізнаєтеся, як це робити, повертаючи *функцію очищення*.
-Let's look at each of these steps in detail.
+Розгляньмо кожен із цих кроків докладніше.
-### Step 1: Declare an Effect {/*step-1-declare-an-effect*/}
+### Крок 1: Оголосіть Ефект {/*step-1-declare-an-effect*/}
-To declare an Effect in your component, import the [`useEffect` Hook](/reference/react/useEffect) from React:
+Щоб оголосити Ефект у своєму компоненті, імпортуйте [Хук `useEffect`](/reference/react/useEffect) з React:
```js
import { useEffect } from 'react';
```
-Then, call it at the top level of your component and put some code inside your Effect:
+Потім викличте його на верхньому рівні свого компонента та помістіть певний код всередину Ефекту:
```js {2-4}
function MyComponent() {
useEffect(() => {
- // Code here will run after *every* render
+ // Код тут виконуватиметься після *кожного* рендерингу
});
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.**
+Щоразу, коли ваш компонент рендериться, React оновлюватиме екран, *а потім* виконуватиме код усередині `useEffect`. Іншими словами, **`useEffect` "відкладає" виконання певного коду до того моменту, коли результат цього рендерингу буде відображено на екрані.**
-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:
+Розгляньмо, як можна використовувати Ефект для синхронізації із зовнішньою системою. Розглянемо React-компонент ``. Було б зручно керувати тим, чи відтворюється відео, чи перебуває на паузі, передаючи йому пропс `isPlaying`:
```js
;
```
-Your custom `VideoPlayer` component renders the built-in browser [`