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/sharing-state-between-components.md
+19-19
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ title: Спільний доступ до стану між компонента
4
4
5
5
<Intro>
6
6
7
-
Інколи ви хочете, щоб стан двох компонент завжди змінювався разом. Щоб так зробити, видаліть стан з обох компонент, перенесіть його до їхнього найближчого спільного батька та потім передайте його вниз до них завдяки пропсам. Це відоме як *підняття стану вгору* і це одна з найпоширеніших речей, які ви будете робити під час написання React коду.
7
+
Іноді вам потрібно, щоб стан двох компонент завжди змінювався разом. Щоб так зробити, видаліть стан з обох компонент, перенесіть його до їхнього найближчого спільного батька та потім передайте стан вниз до них завдяки пропсам. Це відоме як *підняття стану вгору* і це одна з найпоширеніших речей, які ви будете робити під час написання React коду.
8
8
9
9
</Intro>
10
10
@@ -17,13 +17,13 @@ title: Спільний доступ до стану між компонента
17
17
18
18
## Підняття стану на прикладі {/*lifting-state-up-by-example*/}
19
19
20
-
В цьому прикладі, батьківський `Accordion`компонент рендерить дві окремі `Panel`і:
20
+
В цьому прикладі, батьківський компонент `Accordion` рендерить дві окремі `Panel`:
21
21
22
22
*`Accordion`
23
23
-`Panel`
24
24
-`Panel`
25
25
26
-
Кожний `Panel` компонент має булевий `isActive` стан, що визначає чи її вміст видимий.
26
+
Кожний `Panel` компонент має булевий `isActive` стан, що визначає чи його вміст видимий.
27
27
28
28
Натисніть кнопку Показати для обох панелей:
29
29
@@ -99,11 +99,11 @@ h3, p { margin: 5px 0px; }
99
99
2.**Передати** жорсткокодовані дані від спільного батька.
100
100
3.**Додати** стан до спільного батька і передати його вниз разом з обробниками подій.
101
101
102
-
Це дозволить компоненту `Accordion`скоординувати обидві `Panel`і розгортати тільки одну на раз.
102
+
Це дозволить компоненту `Accordion`скоординувати обидві `Panel`та розгортати тільки одну на раз.
103
103
104
104
### Крок 1: Видаліть стан з дочірніх компонент {/*step-1-remove-state-from-the-child-components*/}
105
105
106
-
Ви передасьте контроль `isActive`до `Panel`батьківського компонента. Це означає що батьківський компоненнт передасть `isActive` до `Panel` як проп. Почніть з **видалення цього рядка** з `Panel` компонента:
106
+
Ви передасте контроль `isActive``Panel`до її батьківської компоненти. Це означає що батьківський компоненнт передасть `isActive` до `Panel` як проп. Почніть з **видалення цього рядка** з `Panel` компонента:
Тепер батьківський компонента`Panel` може *контролювати* `isActive`, [передаючи його як проп.](/learn/passing-props-to-a-component) І навпаки, `Panel` компонент тепер *не має контролю* над значенням `isActive`-- тепер це залежить від батьківського компонента!
118
+
Тепер батьківський компонент`Panel` може *контролювати* `isActive`, [передаючи його як проп.](/learn/passing-props-to-a-component) І навпаки, `Panel` компонент тепер *не має контролю* над значенням `isActive`-- тепер це залежить від батьківського компонента!
119
119
120
120
### Крок 2: Передайте жорсткокодовані дані з батьківського компонента {/*step-2-pass-hardcoded-data-from-the-common-parent*/}
121
121
122
-
Щоб підняти стан вгору, ви повинні виявити найближчий спільний батьківський компонент *обох* дочірніх компонентів, які ви хочете скоординувати:
122
+
Щоб підняти стан вгору, ви повинні виявити найближчий спільний батьківський компонент *обох* дочірніх компонент, які ви хочете скоординувати:
123
123
124
124
* `Accordion` *(найближчий спільний батько)*
125
125
- `Panel`
126
126
- `Panel`
127
127
128
-
У цьому прикладі, компонент `Accordion`. Оскільки він знаходиться над обогома панелями і може контролювати їхні пропси, це стане "джерелом правди" для визначення, яка панель є відкритою на даний момент. Зробіть так щоб компонент `Accordion` передавав жорсткокодоване значення `isActive` (наприклад, `true`) до обидвох панелей:
128
+
У цьому прикладі, компонент `Accordion`. Оскільки він знаходиться над обома панелями і може контролювати їхні пропси, це стане "джерелом правди" для визначення, яка панель є відкритою на даний момент. Зробіть так щоб компонент `Accordion` передавав жорсткокодоване значення `isActive` (наприклад, `true`) до обидвох панелей:
129
129
130
130
<Sandpack>
131
131
@@ -172,13 +172,13 @@ h3, p { margin: 5px 0px; }
172
172
173
173
</Sandpack>
174
174
175
-
Спробуйте відредагувати жорсткокодовані значення `isActive` у компоненті `Accordion`і подивіться на результат на екрані.
175
+
Спробуйте відредагувати жорсткокодовані значення `isActive` у компоненті `Accordion`та подивіться результат на екрані.
176
176
177
177
### Крок 3: Добавте стан до батьківської компоненти {/*step-3-add-state-to-the-common-parent*/}
178
178
179
179
Підйом стану вгору часто змінює природу того, що ви зберігаєте як стан.
180
180
181
-
В цьому випадку, тільки одна панель має бути актиною одночасно. Це означає що `Accordion` спільний батьківський компонент має відстежувати, *яка* панель є активною. Замість `boolean` значення, омжна використовувати число як індекс активної `Panel` для змінної стану:
181
+
В цьому випадку, тільки одна панель має бути активною на даний момент. Це означає що `Accordion` спільний батьківський компонент має відстежувати, *яка* панель є активною. Замість `boolean` значення, можна використовувати число як індекс активної `Panel` для змінної стану:
182
182
183
183
```js
184
184
const [activeIndex, setActiveIndex] =useState(0);
@@ -263,19 +263,19 @@ h3, p { margin: 5px 0px; }
263
263
```
264
264
265
265
</Sandpack>
266
-
Підняття стану вгору завершено! Переміщення стану в спільний батьківський компонент дозволяє вам скоординувати дві панелі. Використовуючи активний індекс замість двох "показано" прапорців гарантує, що тільки одна панель буде активною на даний момент. І передаючи вниз обробник подій до дочірнього компонента дозволить дочірньому компоненту змінювати батьківський стан.
266
+
Підняття стану вгору завершено! Переміщення стану в спільний батьківський компонент дозволяє вам скоординувати дві панелі. Використовуючи активний індекс замість двох "активно" прапорців гарантує, що тільки одна панель буде активною на даний момент. І передаючи вниз обробник подій до дочірньої компоненти дозволить йому змінювати батьківський стан.
267
267
268
268
<DiagramGroup>
269
269
270
-
<Diagram name="sharing_state_parent" height={385} width={487} alt="Діаграма зоображає дерево із трьох компонент, один батьківський з назвою Accordion та двох дочірніх з назвами Panel. Accordion містить activeIndex нульовим значенням, яке стає isActive із значенням true, що передається до першої панелі і isActive із значенням false до другої Panel.">
270
+
<Diagram name="sharing_state_parent" height={385} width={487} alt="Діаграма зоображає дерево із трьох компонент, один батьківський з назвою Accordion та двох дочірніх з назвами Panel. Accordion містить activeIndex із нульовим значенням, яке стає isActive із значенням true, що передається до першої панелі та isActive із значенням false до другої Panel.">
271
271
272
272
Початково, `Accordion` має `activeIndex` із значенням `0`, тому перша `Panel` отримує `isActive =true`
273
273
274
274
</Diagram>
275
275
276
-
<Diagram name="sharing_state_parent_clicked" height={385} width={521} alt="Така сама діаграма що й попередня, тільки із activeIndex значення батьківського компонентапідсвічено, що вказує клік із значенням зміненим на одиницю. Шлях до обох дочірніх Panel компонент таокж підсвічений та isActive значення, яке передане до кожної дочірньої компоненти є протилежним: false для першої Panel та true для другої" >
276
+
<Diagram name="sharing_state_parent_clicked" height={385} width={521} alt="Така сама діаграма що й попередня, тільки activeIndex значення батьківського компонента, яке підсвічено, що вказує на клік із значенням зміненим на одиницю. Шлях до обох дочірніх Panel компонент таокж підсвічений та isActive значення, яке передане до кожної дочірньої компоненти є протилежним: false для першої Panel та true для другої" >
277
277
278
-
Коли `Accordion``activeIndex`стан змінюється на `1`, друга `Panel` отримує `isActive =true` замість
278
+
Коли стан `Accordion``activeIndex` змінюється на `1`, друга `Panel` отримує `isActive =true`
279
279
280
280
</Diagram>
281
281
@@ -291,17 +291,17 @@ h3, p { margin: 5px 0px; }
291
291
292
292
Неконтрольовані компоненти легше використовувати із їхніми батьківськими, оскільки вони вимагають менше налаштувань. Але вони менш гнучкі, коли ви хочете скоординувати їх разом. Контрольовані компоненти є максимально гнучкими але вони вимагають від батьківських компонент повністю налаштувати їх за допомогою пропсів.
293
293
294
-
На практиці, "контрольований" та "неконтрольований" не є строгими технічними термінами--кожен компонент, зазвичай має суміш обох, із локальним станом та пропсами. Однак, це корисний спосіб, щоб поговорити як компоненти спроектовані, та які можливості вони пропонують.
294
+
На практиці, "контрольований" та "неконтрольований" не є строгими технічними термінами--кожен компонент зазвичай має певну суміш як локального стану та пропсів. Однак, це корисний спосіб, розповісти про те, як компоненти розроблені та які можливості вони пропонують.
295
295
296
-
Коли пишите компонент, подумайте, яка інформація в ньому має бути контрольованою (за допомогою пропсів), а яка інформація має бути неконтрольована (за допомогою стану). Але завжди можете передумати і покращити це пізніше.
296
+
Коли пишите компонент, подумайте, яка інформація в ньому має бути контрольованою (за допомогою пропсів), а яка інформація має бути неконтрольована (за допомогою стану). Але завжди можете передумати і змінити це пізніше.
297
297
298
298
</DeepDive>
299
299
300
300
## Єдине джерело правди для кожного стану {/*a-single-source-of-truth-for-each-state*/}
301
301
302
302
В React застосунку, багато компонент матимуть їхній власний стан. Деякий стан може "жити" близько до листкових компонент (компоненти, що знаходяться внизу дерева), для прикладу, поля вводу. Інші стани можуть "жити" ближче до вершини застосунку. Для прикладу, навіть клієнтські бібліотеки маршрутизації зазвичай реалізовані за допомогою зберігання поточного маршруту в React стані та передають його вниз за допомогою пропсів!
303
303
304
-
**Для кожної унікальної частинки стану, ви вибирете компонент що "належить" йому.** Цей принцип також відомий як ["єдине джерело правди"](https://en.wikipedia.org/wiki/Single_source_of_truth) Це не означає, що весь стан знаходиться в одному місці--це означає, що для _кожної_ частини стану існує _певний_ компонент, який містить ту частину інформації. Замість дублювання спільного стану між компонентами, *підніміть його вгору* до їхнього спільного батька та *передайте його вниз* до дочірніх компонент, де він потрібний.
304
+
**Для кожної унікальної частинки стану, ви оберете компонент що "належить" йому.** Цей принцип також відомий як ["єдине джерело правди"](https://en.wikipedia.org/wiki/Single_source_of_truth) Це не означає, що весь стан знаходиться в одному місці--це означає, що для _кожної_ частини стану існує _певний_ компонент, який містить ту частину інформації. Замість дублювання спільного стану між компонентами, *підніміть його вгору* до їхнього спільного батька та *передайте його вниз* до дочірніх компонент, де він потрібний.
305
305
306
306
Ваш застосунок буде змінюватись в міру того, як ви працюєте над ним. Часто буває так. що ви переміщуєте стан вниз або назад вгору, протягом того, як стараєтесь з'ясувати де кожен шматок стану "живе". Це все частина процесу!
307
307
@@ -324,7 +324,7 @@ h3, p { margin: 5px 0px; }
324
324
325
325
<Hint>
326
326
327
-
Вам потрібно підняти їхній стан вгору до батьківського компонентам.
327
+
Вам потрібно підняти їхній стан вгору до батьківської компоненти.
328
328
329
329
</Hint>
330
330
@@ -428,7 +428,7 @@ label { display: block; }
428
428
429
429
В цьому прикладі, `SearchBar` має власний `query` стан що контролює текстове поле вводу. Його батьківський `FilterableList` компонент відображає `List` елементів але це не враховує пошуковий запит.
430
430
431
-
Використайте `filterItems(foods, query)` функцію щоб фільтрувати список відповідно до пошукового запиту. Щоб перевірити ваші зміни, переконайтеся, що введення "с" в поле введення відфільтрує список до "Суші", та "Дім сум".
431
+
Використайте `filterItems(foods, query)` функцію щоб фільтрувати список відповідно до пошукового запиту. Щоб перевірити ваші зміни, переконайтеся, що введення "с" в поле введення відфільтрує список до "Суші" та "Дім сум".
432
432
433
433
Зверніть увагу, що `filterItems` вже реалізовано та імпортовано, отже вам не потрібно писати його самостійно!
0 commit comments