Skip to content

Commit afb5c4f

Browse files
Apply suggestions from code review
Co-authored-by: Alina Listunova <[email protected]>
1 parent a5f2d7a commit afb5c4f

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

src/content/learn/scaling-up-with-reducer-and-context.md

+28-28
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ title: Масштабування з використанням контекст
1010

1111
<YouWillLearn>
1212

13-
* Як поєднати з контекстом
14-
* Як уникнути передачі стану та диспатча через пропси
13+
* Як поєднати редюсер із контекстом
14+
* Як уникнути передавання стану та відправляння подій через пропси
1515
* Як зберігати логіку контексту і стану в окремому файлі
1616

1717
</YouWillLearn>
1818

1919
## Поєднання редюсера з контекстом {/*combining-a-reducer-with-context*/}
2020

21-
Як ми вже бачили, у прикладі з [цього розділу](/learn/extracting-state-logic-into-a-reducer), стан керується редюсером. Функція редюсера містить всю логіку оновлення стану і оголошена в кінці файлу:
21+
Як ми вже бачили у прикладі з [цього розділу](/learn/extracting-state-logic-into-a-reducer), стан керується редюсером. Функція редюсера містить всю логіку оновлення стану і оголошена в кінці файлу:
2222

2323
<Sandpack>
2424

@@ -207,7 +207,7 @@ ul, li { margin: 0; padding: 0; }
207207

208208
</Sandpack>
209209

210-
Редюсер допомагає тримати обробники подій короткими і зрозумілими. Проте, з розвитком вашого додатка може виникнути проблема. **Наразі стан `tasks` та функція `dispatch` доступні тільки в компоненті `TaskApp` на верхньому рівні.** Щоб інші компоненти могли отримувати та оновлювати перелік завдань, потрібно явно [передавати](#passing-props-to-a-component) пропсами поточний стан і обробники подій.
210+
Редюсер допомагає тримати обробники подій короткими і зрозумілими. Проте може виникнути проблема, коли ваш застосунок зросте. **Наразі стан `tasks` та функція `dispatch` доступні тільки в компоненті `TaskApp` на верхньому рівні.** Щоб інші компоненти могли отримувати та оновлювати перелік завдань, потрібно явно [передавати](#passing-props-to-a-component) поточний стан і обробники подій, які змінюють його, як пропси.
211211

212212
Наприклад, `TaskApp` передає перелік завдань і обробники подій компоненту `TaskList`:
213213

@@ -229,25 +229,25 @@ ul, li { margin: 0; padding: 0; }
229229
/>
230230
```
231231

232-
У невеликому прикладі це добре працює, але якщо у вас є десятки або сотні вкладених компонентів, передавати таким чином весь стан і функції може бути досить неприємно!
232+
У невеликому прикладі це працює добре, але якщо у вас є десятки або сотні вкладених компонентів, передавати так увесь стан і функції може бути досить неприємно!
233233

234-
Тому, як альтернатива передачі через пропси, ви можете помістити і стан `tasks`, і функцію `dispatch` [в контекст](/learn/passing-data-deeply-with-context). **Таким чином, будь-який компонент, що знаходиться нижче `TaskApp` у дереві, може мати доступ та надсилати події, уникнувши передачі пропсів через безліч компонентів.**
234+
Тому, як альтернатива передаванню через пропси, ви можете помістити і стан `tasks`, і функцію `dispatch` [в контекст](/learn/passing-data-deeply-with-context). **У такий спосіб, будь-який компонент, що знаходиться нижче `TaskApp` у дереві, може мати доступ та надсилати події, уникнувши передавання пропсів через безліч компонентів ("prop drilling").**
235235

236236
Ось як можна поєднати редюсер із контекстом:
237237

238238
1. **Створіть** контекст.
239-
2. **Розмістіть** стан і диспетчер у контексті.
239+
2. **Помістіть** стан і функцію dispatch у контекст.
240240
3. **Використовуйте** контекст будь-де в дереві компонентів.
241241

242-
### Крок 1: Створення контексту {/*step-1-create-the-context*/}
242+
### Крок 1: Створіть контекст {/*step-1-create-the-context*/}
243243

244244
Хук `useReducer` повертає поточний стан `tasks` та функцію `dispatch`, яка дає змогу оновлювати цей стан:
245245

246246
```js
247247
const [tasks, dispatch] = useReducer(tasksReducer, initialTasks);
248248
```
249249

250-
Щоб передати їх далі по дереву, [створить](/learn/passing-data-deeply-with-context#step-2-use-the-context) два окремих контексти:
250+
Щоб передати їх далі деревом, [створіть](/learn/passing-data-deeply-with-context#step-2-use-the-context) два окремих контексти:
251251

252252
- `TasksContext` надає поточний перелік завдань.
253253
- `TasksDispatchContext` надає функцію, яка дає змогу компонентам надсилати події.
@@ -448,11 +448,11 @@ ul, li { margin: 0; padding: 0; }
448448

449449
</Sandpack>
450450

451-
Тут ви передаєте `null` як значення за замовчуванням для обох контекстів. Дійсні значення будуть надані компонентом `TaskApp`.
451+
Тут ви передаєте `null` як початкове значення для обох контекстів. Дійсні значення будуть надані компонентом `TaskApp`.
452452

453453
### Крок 2: Помістіть стан і функцію dispatch у контекст {/*step-2-put-state-and-dispatch-into-context*/}
454454

455-
Тепер ви можете імпортувати обидва контексти у ваш компонент `TaskApp`. Візьміть `tasks` та `dispatch`, які повертає `useReducer()`, і [надайте їх](/learn/passing-data-deeply-with-context#step-3-provide-the-context) всьому вкладеному дереву компонентів:
455+
Тепер ви можете імпортувати обидва контексти у ваш компонент `TaskApp`. Візьміть `tasks` та `dispatch`, повернуті хуком `useReducer()`, і [надайте їх](/learn/passing-data-deeply-with-context#step-3-provide-the-context) всьому вкладеному дереву компонентів:
456456

457457
```js {4,7-8}
458458
import { TasksContext, TasksDispatchContext } from './TasksContext.js';
@@ -669,9 +669,9 @@ ul, li { margin: 0; padding: 0; }
669669

670670
</Sandpack>
671671

672-
На наступному етапі видалимо передачу пропсів.
672+
Далі видалимо передавання пропсів.
673673

674-
### Step 3: Використовуйте контекст у будь-якому місці дерева компонентів {/*step-3-use-context-anywhere-in-the-tree*/}
674+
### Крок 3: Використовуйте контекст будь-де у дереві компонентів {/*step-3-use-context-anywhere-in-the-tree*/}
675675

676676
Тепер вам не потрібно передавати перелік завдань або обробники подій скрізь усе дерево компонентів:
677677

@@ -693,7 +693,7 @@ export default function TaskList() {
693693
// ...
694694
```
695695
696-
Щоб оновити перелік завдань, будь-який компонент може взяти функцію `dispatch` з контексту та викликати її:
696+
Щоб оновити перелік завдань, будь-який компонент може взяти функцію `dispatch` із контексту та викликати її:
697697
698698
```js {3,9-13}
699699
export default function AddTask() {
@@ -713,7 +713,7 @@ export default function AddTask() {
713713
// ...
714714
```
715715
716-
**Компонент `TaskApp` не передає жодних обробників подій, і `TaskList` також не передає нічого компоненту `Task`.** Кожен компонент обирає лише потрібний йому контекст:
716+
**Компонент `TaskApp` не передає жодних обробників подій, і `TaskList` також не передає нічого компоненту `Task`.** Кожен компонент вибирає лише потрібний йому контекст:
717717
718718
<Sandpack>
719719
@@ -897,7 +897,7 @@ ul, li { margin: 0; padding: 0; }
897897
898898
</Sandpack>
899899
900-
**Стан все ще "живе" у компоненті `TaskApp` на верхньому рівні та керується за допомогою `useReducer`.** Але його `tasks` і `dispatch` тепер доступні кожному компоненту нижче в дереві, завдяки імпорту та використанню контекстів.
900+
**Стан все ще "живе" у компоненті `TaskApp` на верхньому рівні та керується за допомогою `useReducer`.** Але його `tasks` і `dispatch` тепер доступні кожному компоненту нижче в дереві завдяки імпорту та використанню контекстів.
901901
902902
## Переміщення всієї логіки в один файл {/*moving-all-wiring-into-a-single-file*/}
903903
@@ -910,11 +910,11 @@ export const TasksContext = createContext(null);
910910
export const TasksDispatchContext = createContext(null);
911911
```
912912
913-
Цей файл скоро стане більш наповненим! Додамо в нього редюсер. Потім оголосимо новий компонент `TasksProvider`. Цей компонент об’єднає всі частини разом. Він:
913+
Цей файл скоро стане більш наповненим! Додамо в нього редюсер. Потім оголосимо новий компонент `TasksProvider`. Цей компонент зв'яже всі частини разом. Він:
914914
915915
1. Керуватиме станом за допомогою редюсера.
916-
2. Надаватиме обидва контексти компонентам нижчим в ієрархії.
917-
3. [Прийматиме `children` як пропс](/learn/passing-props-to-a-component#passing-jsx-as-children), щоб було можливим передавати в нього JSX.
916+
2. Надаватиме обидва контексти ієрархічно нижчим компонентам.
917+
3. [Матиме проп `children`](/learn/passing-props-to-a-component#passing-jsx-as-children), щоб було можливим передавати в нього JSX.
918918
919919
```js
920920
export function TasksProvider({ children }) {
@@ -1140,7 +1140,7 @@ const tasks = useTasks();
11401140
const dispatch = useTasksDispatch();
11411141
```
11421142
1143-
**Це не змінює функціональність, але дає змогу згодом розділити контексти або додати логіку. Тепер усі налаштування контексту та редюсера знаходяться у файлі `TasksContext.js`. Це допомагає зберегти компоненти чистими і не перевантаженими, зосередженими на відображенні даних, а не на їх отриманні.**
1143+
**Це не змінює функціональність, але дає змогу згодом розділити контексти або додати логіку. Тепер усі налаштування контексту та редюсера знаходяться у файлі `TasksContext.js`. Це допомагає зберегти компоненти чистими і неперевантаженими, зосередженими на відображенні даних, а не на їхньому отриманні.**
11441144
11451145
<Sandpack>
11461146
@@ -1340,27 +1340,27 @@ ul, li { margin: 0; padding: 0; }
13401340
13411341
</Sandpack>
13421342
1343-
Ви можете вважати `TasksProvider` частиною інтерфейсу, яка відповідає за роботу з завданнями, `useTasks` — способом доступу до завдань, а `useTasksDispatch` — способом їх оновлення з будь-якого компонента, що знаходиться нижче в дереві компонентів.
1343+
Ви можете вважати `TasksProvider` частиною інтерфейсу, яка відповідає за роботу з завданнями, `useTasks` — способом доступу до завдань, а `useTasksDispatch` — способом їхнього оновлення з будь-якого компонента, що знаходиться нижче в дереві компонентів.
13441344
13451345
<Note>
13461346
1347-
Функції на кшталт `useTasks` та `useTasksDispatch` називаються *[Хуками користувача](/learn/reusing-logic-with-custom-hooks)*. Ваша функція вважається хуком користувача, якщо її назва починається з `use`. Це дає змогу використовувати інші хуки, як-от `useContext`, всередині неї.
1347+
Функції на кшталт `useTasks` та `useTasksDispatch` називаються *[хуками користувача (Custom Hooks)](/learn/reusing-logic-with-custom-hooks)*. Ваша функція вважається хуком користувача, якщо її назва починається з `use`. Це дає змогу використовувати інші хуки, як-от `useContext`, всередині неї.
13481348
13491349
</Note>
13501350
1351-
Коли додаток зростає, у вас може зявитися багато пар контекст-редюсерів. Це потужний спосіб масштабувати додаток і [ділитися станом](/learn/sharing-state-between-components) без зайвих зусиль щоразу, коли потрібно отримати дані з глибини дерева компонентів.
1351+
Коли застосунок зростає, у вас може з'явитися багато пар "контекст-редюсер". Це потужний спосіб масштабувати застосунок і [ділитися станом](/learn/sharing-state-between-components) без зайвих зусиль щоразу, коли потрібно отримати дані глибоко в дереві компонентів.
13521352
13531353
<Recap>
13541354
1355-
- Ви можете об'єднати редюсер з контекстом, щоб будь-який компонент міг мати доступ та оновлювати стан у компонентах вищих за ієрархією.
1355+
- Ви можете об'єднати редюсер із контекстом, щоб будь-який компонент міг отримати та оновити стан, що вище деревом.
13561356
- Щоб надати стан і функцію `dispatch` компонентам нижче:
13571357
1. Створіть два контексти (для стану і для функцій `dispatch`).
13581358
2. Надайте обидва контексти компоненту, який використовує редюсер.
1359-
3. Використовуйте будь-який контекст у компонентах, яким потрібно мати ці дані.
1360-
- Щоб ще більше спростити компоненти, виносьте ці налаштування в один файл.
1359+
3. Використовуйте будь-який із цих контекстів у компонентах, яким вони потрібні.
1360+
- Щоб ще більше спростити компоненти, винесіть відповідну логіку в один файл.
13611361
- Експортуйте компонент, наприклад `TasksProvider`, який надає контекст.
1362-
- Ви також можете експортувати користувацькі хуки, як-от `useTasks` та `useTasksDispatch`, для доступу до контексту.
1363-
- У додатку може бути багато схожих на цю пар контекст-редюсерів.
1362+
- Ви також можете експортувати хуки користувача, як-от `useTasks` та `useTasksDispatch`, для доступу до контексту.
1363+
- У застосунку може бути багато схожих на цю пар "контекст-редюсер".
13641364
13651365
</Recap>
13661366

0 commit comments

Comments
 (0)