Skip to content

Commit b84bd0b

Browse files
committed
fix: apply suggestions from code review
1 parent 6a7bd94 commit b84bd0b

File tree

2 files changed

+33
-31
lines changed

2 files changed

+33
-31
lines changed

src/content/learn/sharing-state-between-components.md

+32-30
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
---
2-
title: Спільний доступ до стану між компонентами
2+
title: Поширення стану між компонентами
33
---
44

55
<Intro>
66

7-
Іноді вам потрібно, щоб стан двох компонент завжди змінювався разом. Щоб так зробити, видаліть стан з обох компонент, перенесіть його до їхнього найближчого спільного батька та потім передайте стан вниз до них завдяки пропсам. Це відоме як *підняття стану вгору* і це одна з найпоширеніших речей, які ви будете робити під час написання React коду.
7+
Іноді вам потрібно, щоб стан двох компонентів завжди змінювався разом. Для цього видаліть стан з обох компонентів, перенесіть його до їхнього найближчого спільного батьківського компонента і потім передайте вниз до них через пропси. Це називається *підняттям стану вгору (lifting state up)*, і це одна з найпоширеніших речей, які ви будете робити під час написання React-коду.
88

99
</Intro>
1010

1111
<YouWillLearn>
1212

13-
- Як поширювати стан між компонент підняттям його вгору
14-
- Що таке контрольовані та не контрольовані компоненти
13+
- Як поширювати стан між компонентами підняттям його вгору
14+
- Що таке контрольовані та неконтрольовані компоненти
1515

1616
</YouWillLearn>
1717

1818
## Підняття стану на прикладі {/*lifting-state-up-by-example*/}
1919

20-
В цьому прикладі, батьківський компонент `Accordion` рендерить дві окремі `Panel`:
20+
У цьому прикладі батьківський компонент `Accordion` рендерить два окремих компонента-панелі `Panel`:
2121

2222
* `Accordion`
2323
- `Panel`
2424
- `Panel`
2525

26-
Кожний `Panel` компонент має булевий `isActive` стан, що визначає чи його вміст видимий.
26+
Кожний компонент `Panel` має булевий стан `isActive`, який визначає, чи його вміст видимий.
2727

28-
Натисніть кнопку Показати для обох панелей:
28+
Натисніть кнопку "Показати" для обох панелей:
2929

3030
<Sandpack>
3131

@@ -53,10 +53,10 @@ export default function Accordion() {
5353
<>
5454
<h2>Алмати, Казахстан</h2>
5555
<Panel title="Про Алмати">
56-
Із населенням близько 2 мільйонів, Алмати є найбільшим містом в Казахстані. З 1929 по 1997, воно було його столицею.
56+
З майже 2-мільйонним населеннм Алмати є найбільшим містом в Казахстані. З 1929 до 1997 воно було його столицею.
5757
</Panel>
5858
<Panel title="Етимологія">
59-
Назва походить від казахського слова <span lang="kk-KZ">алма</span>, що означає "яблуко" і часто перекладалось як "повний яблук". Насправді, регіон що оточує Алмати вважається прабатьківщиною яблука, і дика <i lang="la">Malus sieversii</i> вважається ймовірним кандидатом на предка сучасного домашнього яблука.
59+
Назва походить від казахського слова <span lang="kk-KZ">алма</span>, що означає "яблуко" і часто перекладалось як "повний яблук". Насправді регіон, який оточує Алмати вважається прабатьківщиною яблука, а дика <i lang="la">Malus sieversii</i> - ймовірним кандидатом на предка сучасного домашнього яблука.
6060
</Panel>
6161
</>
6262
);
@@ -73,37 +73,37 @@ h3, p { margin: 5px 0px; }
7373

7474
</Sandpack>
7575

76-
Зверніть увагу, що натискання кнопки однієї панелі не впливає на іншу панель--вони незалежні.
76+
Зверніть увагу, що натискання кнопки однієї панелі не впливає на іншу панель -- вони незалежні.
7777

7878
<DiagramGroup>
7979

80-
<Diagram name="sharing_state_child" height={367} width={477} alt="Діаграма показує дерево з трьох компонент, один батько з назвою Accordion і два дочірні компоненти з назвами Panel. Обидва компоненти Panel містять isActive зі значенням false.">
80+
<Diagram name="sharing_state_child" height={367} width={477} alt="Діаграма показує дерево з трьох компонентів, один батьківський із міткою Accordion і два дочірні з мітками Panel. Обидва компоненти Panel містять isActive зі значенням false.">
8181

82-
Спочатку стан `isActive` кожної `Panel` дорівнює `false`, тому вони обидві виглядають згорнутими
82+
Спочатку стан `isActive` кожного `Panel` дорівнює `false`, тому обидва мають згорнутий вигляд
8383

8484
</Diagram>
8585

86-
<Diagram name="sharing_state_child_clicked" height={367} width={480} alt="Та сама діаграма, що й попередня, з виділеним isActive першого дочірнього компонента Panel, що вказує на клік зі значенням isActive, встановленим у true. Другий компонент Panel все ще містить значення false." >
86+
<Diagram name="sharing_state_child_clicked" height={367} width={480} alt="Та сама діаграма, що й попередня, з виділеним isActive першого дочірнього компонента Panel, що вказує на натискання зі значенням isActive, встановленим у true. Другий компонент Panel все ще містить значення false." >
8787

88-
Натискання на будь-яку з кнопок `Panel` призведе до оновлення стану `isActive` тільки цієї `Panel`.
88+
Натискання на будь-яку з кнопок `Panel` призведе до оновлення стану `isActive` тільки цієї `Panel`
8989

9090
</Diagram>
9191

9292
</DiagramGroup>
9393

94-
**Але тепер припустимо, що ви хочете змінити це так, щоб тільки одна панель була розгорнути в будь-який момент часу.** При такому дизайні, розгортання другої панелі повинно згорнути першу. Як би ви це зробили?
94+
**Але тепер припустимо, що ви хочете змінити це так, щоб тільки одна панель була розгорнута в будь-який момент часу.** За цього дизайну розгортання другої панелі повинно згорнути першу. Як би ви це зробили?
9595

9696
Щоб скоординувати ці дві панелі, вам потрібно "підняти їхній стан вгору" до батьківського компонента в три кроки:
9797

98-
1. **Видалити** стан із дочірніх компонент.
99-
2. **Передати** жорсткокодовані дані від спільного батька.
98+
1. **Видалити** стан із дочірніх компонентів.
99+
2. **Передати** незмінні дані від спільного батьківського компонента.
100100
3. **Додати** стан до спільного батька і передати його вниз разом з обробниками подій.
101101

102-
Це дозволить компоненту `Accordion`скоординувати обидві `Panel` та розгортати тільки одну на раз.
102+
Це дасть компоненту `Accordion` змогу скоординувати обидва компоненти `Panel` та розгортати тільки один щоразу.
103103

104-
### Крок 1: Видаліть стан з дочірніх компонент {/*step-1-remove-state-from-the-child-components*/}
104+
### Крок 1: Видаліть стан із дочірніх компонентів {/*step-1-remove-state-from-the-child-components*/}
105105

106-
Ви передасте контроль `isActive` `Panel` до її батьківської компоненти. Це означає що батьківський компоненнт передасть `isActive` до `Panel` як проп. Почніть з **видалення цього рядка** з `Panel` компонента:
106+
Ви передасте контроль `isActive` компонента `Panel` його батьківському компоненту. Це означає, що батьківський компонент передасть `isActive` дочірньому `Panel` як проп. Почніть із **видалення цього рядка** з `Panel`:
107107

108108
```js
109109
const [isActive, setIsActive] = useState(false);
@@ -115,17 +115,17 @@ const [isActive, setIsActive] = useState(false);
115115
function Panel({ title, children, isActive }) {
116116
```
117117
118-
Тепер батьківський компонент `Panel` може *контролювати* `isActive`, [передаючи його як проп.](/learn/passing-props-to-a-component) І навпаки, `Panel` компонент тепер *не має контролю* над значенням `isActive`-- тепер це залежить від батьківського компонента!
118+
Тепер батьківський компонент `Panel` може *контролювати* `isActive`, [передаючи його як проп.](/learn/passing-props-to-a-component) І навпаки: `Panel` тепер *не має контролю* над значенням `isActive` -- тепер це залежить від батьківського компонента!
119119
120-
### Крок 2: Передайте жорсткокодовані дані з батьківського компонента {/*step-2-pass-hardcoded-data-from-the-common-parent*/}
120+
### Крок 2: Передайте незмінні дані від спільного батьківського компонента {/*step-2-pass-hardcoded-data-from-the-common-parent*/}
121121
122-
Щоб підняти стан вгору, ви повинні виявити найближчий спільний батьківський компонент *обох* дочірніх компонент, які ви хочете скоординувати:
122+
Щоб підняти стан вгору, ви повинні виявити найближчий спільний батьківський компонент *обох* дочірніх компонентів, які ви хочете скоординувати:
123123
124124
* `Accordion` *(найближчий спільний батько)*
125125
- `Panel`
126126
- `Panel`
127127
128-
У цьому прикладі, компонент `Accordion`. Оскільки він знаходиться над обома панелями і може контролювати їхні пропси, це стане "джерелом правди" для визначення, яка панель є відкритою на даний момент. Зробіть так щоб компонент `Accordion` передавав жорсткокодоване значення `isActive` (наприклад, `true`) до обидвох панелей:
128+
У цьому прикладі ним є компонент `Accordion`. Оскільки він знаходиться над обома панелями і може контролювати їхні пропси, він стане "джерелом правди" для визначення того, яка панель є наразі відкритою. Зробіть так, щоб компонент `Accordion` передавав незмінне значення `isActive` (наприклад, `true`) до обох панелей:
129129
130130
<Sandpack>
131131
@@ -135,12 +135,12 @@ import { useState } from 'react';
135135
export default function Accordion() {
136136
return (
137137
<>
138-
<h2>Алмати, Казахстан</h2>
138+
<h2>Алмати, Казахстан</h2>
139139
<Panel title="Про Алмати" isActive={true}>
140-
Із населенням близько 2 мільйонів, Алмати є найбільшим містом в Казахстані. З 1929 по 1997, воно було його столицею.
140+
З майже 2-мільйонним населеннм Алмати є найбільшим містом в Казахстані. З 1929 до 1997 воно було його столицею.
141141
</Panel>
142142
<Panel title="Етимологія" isActive={true}>
143-
Назва походить від казахського слова <span lang="kk-KZ">алма</span>, що означає "яблуко" і часто перекладалось як "повний яблук". Насправді, регіон що оточує Алмати вважається прабатьківщиною яблука, і дика <i lang="la">Malus sieversii</i> вважається ймовірним кандидатом на предка сучасного домашнього яблука.
143+
Назва походить від казахського слова <span lang="kk-KZ">алма</span>, що означає "яблуко" і часто перекладалось як "повний яблук". Насправді регіон, який оточує Алмати вважається прабатьківщиною яблука, а дика <i lang="la">Malus sieversii</i> - ймовірним кандидатом на предка сучасного домашнього яблука.
144144
</Panel>
145145
</>
146146
);
@@ -183,6 +183,7 @@ h3, p { margin: 5px 0px; }
183183
```js
184184
const [activeIndex, setActiveIndex] = useState(0);
185185
```
186+
186187
Коли `activeIndex` доорівнює `0`, перша панель буде відкритою і коли це значення дорівнює `1`, активною буде друга.
187188
188189
Натискаючи "Показати" кнопку в одній із `Panel` має змінити активний індекс в `Accordion`. `Panel` не може встановлювати `activeIndex` стан безпосередньо, оскільки це визанчається всередині `Accordion`. Компонент `Accordion` повинен *явно дозволити* компоненту `Panel` змінювати свій стан за допомогою [передавання обробника подій вниз як проп](/learn/responding-to-events#passing-event-handlers-as-props):
@@ -203,6 +204,7 @@ const [activeIndex, setActiveIndex] = useState(0);
203204
</Panel>
204205
</>
205206
```
207+
206208
Кнопка `<button>` всередині `Panel` тепер буде використовувати `onShow` проп як обробник події кліку:
207209
208210
<Sandpack>
@@ -214,20 +216,20 @@ export default function Accordion() {
214216
const [activeIndex, setActiveIndex] = useState(0);
215217
return (
216218
<>
217-
<h2>Алмати, Казахстан</h2>
219+
<h2>Алмати, Казахстан</h2>
218220
<Panel
219221
title="Про Алмати"
220222
isActive={activeIndex === 0}
221223
onShow={() => setActiveIndex(0)}
222224
>
223-
Із населенням близько 2 мільйонів, Алмати є найбільшим містом в Казахстані. З 1929 по 1997, воно було його столицею.
225+
З майже 2-мільйонним населеннм Алмати є найбільшим містом в Казахстані. З 1929 до 1997 воно було його столицею.
224226
</Panel>
225227
<Panel
226228
title="Етимологія"
227229
isActive={activeIndex === 1}
228230
onShow={() => setActiveIndex(1)}
229231
>
230-
Назва походить від казахського слова <span lang="kk-KZ">алма</span>, що означає "яблуко" і часто перекладалось як "повний яблук". Насправді, регіон що оточує Алмати вважається прабатьківщиною яблука, і дика <i lang="la">Malus sieversii</i> вважається ймовірним кандидатом на предка сучасного домашнього яблука.
232+
Назва походить від казахського слова <span lang="kk-KZ">алма</span>, що означає "яблуко" і часто перекладалось як "повний яблук". Насправді регіон, який оточує Алмати вважається прабатьківщиною яблука, а дика <i lang="la">Malus sieversii</i> - ймовірним кандидатом на предка сучасного домашнього яблука.
231233
</Panel>
232234
</>
233235
);

src/sidebarLearn.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@
147147
"path": "/learn/choosing-the-state-structure"
148148
},
149149
{
150-
"title": "Sharing State Between Components",
150+
"title": "Поширення стану між компонентами",
151151
"path": "/learn/sharing-state-between-components"
152152
},
153153
{

0 commit comments

Comments
 (0)