Skip to content

Commit 9080ec3

Browse files
authored
Apply suggestions from code review
1 parent d7b5342 commit 9080ec3

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

src/content/learn/conditional-rendering.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: Умовний рендеринг
44

55
<Intro>
66

7-
Ваши компоненти часто потребують відображати різний контент в залежності від умови. У React ви можете умовно рендерити JSX, використовуючи синтаксис JavaScript: оператори `if`, `&&` та `? :`.
7+
Ваші компоненти часто матимуть потребу відображати різні речі в залежності від різних умов. У React ви можете умовно рендерити JSX, використовуючи синтаксис JavaScript: оператори `if`, `&&` та `? :`.
88

99
</Intro>
1010

@@ -100,13 +100,13 @@ export default function PackingList() {
100100

101101
</Sandpack>
102102

103-
Спробуйте змінити код цього прикладу та подивіться, як змінюється результат!
103+
Спробуйте змінити що повертає цей код цього в обох випадках та подивіться, як змінюється результат!
104104

105-
Зверніть увагу, як ви створюєте розгалужену логіку використовуючи `if` та `return` із JavaScript. У React керування потоком (наприклад, умовами) обробляється за допомогою JavaScript.
105+
Зверніть увагу на те, як ви створюєте розгалужену логіку з JavaScript `if` та `return` виразами. У React, потік контролю (так само як і умови, стани) обробляється за допомогою JavaScript.
106106

107-
### Умовне повернення пустоти за допомогою `null` {/*conditionally-returning-nothing-with-null*/}
107+
### Умовне повернення нічого за допомогою `null` {/*conditionally-returning-nothing-with-null*/}
108108

109-
У деяких ситуаціях ви хочете взагалі нічого не відображати. Наприклад, скажімо, ви не хочете показувати запаковані елементи взагалі. Але компонент повинен повертати щось. У цьому випадку ви можете повернути `null`:
109+
У певних ситуаціях, ви не хотітимете рендерити взагалі будь-що. Наприклад, скажімо, ви не хочете рендерити запаковані елементи взагалі. Але компонент повинен повертати щось. У цьому випадку ви можете повернути `null`:
110110

111111
```js
112112
if (isPacked) {
@@ -152,11 +152,11 @@ export default function PackingList() {
152152

153153
</Sandpack>
154154

155-
Практика поверення `null` з компонента не є поширенною, оскільки це може здивувати розробника, який намагається його відобразити. Частіше ви б умовно включали або виключали компонент у JSX батьківського компонента. Ось як це зробити!
155+
Повернення `null` з компонента не є поширеною практикою, оскільки це може застати зненацька розробника, який намагається його відобразити. Часто, ви умовно включатимете або виключатимете компонент в JSX батьківського компонента. Ось як це зробити!
156156

157157
## Умовне включення JSX {/*conditionally-including-jsx*/}
158158

159-
У попередньому прикладі ви контролювали, яке JSX-дерево повертатиме компонент, якщо взагалі буде. Ви вже могли помітити деяке дублювання у результаті рендера:
159+
У попередньому прикладі ви контролювали, яке JSX-дерево буде повернено компонентом. Ви вже могли помітити деяке дублювання у виводі рендеру:
160160

161161
```js
162162
<li className="item">{name} ✔</li>
@@ -168,7 +168,7 @@ export default function PackingList() {
168168
<li className="item">{name}</li>
169169
```
170170

171-
Обидві умовні гілки повертають `<li className="item">...</li>`:
171+
Обидві гілки умов повертають `<li className="item">...</li>`:
172172

173173
```js
174174
if (isPacked) {
@@ -177,7 +177,7 @@ if (isPacked) {
177177
return <li className="item">{name}</li>;
178178
```
179179

180-
Хоча це дублювання не шкідливе, воно може ускладнити підтримку вашого коду. Що, якщо ви хочете змінити `className`? Вам доведеться робити це в двох місцях у вашому коду! У такій ситуації ви могли б умовно включити трохи JSX, щоб зробити ваш код більш [DRY.](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
180+
Хоча це дублювання не є шкідливим, воно може ускладнити підтримування вашого коду. Що, якщо ви захочете змінити `className`? Вам доведеться зробити це в двох місцях вашого коду! У такій ситуації ви могли б умовно включити трохи JSX, щоб зробити ваш код більш [DRY.](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
181181

182182
### Умовний (тернарний) оператор (`? :`) {/*conditional-ternary-operator--*/}
183183

@@ -202,17 +202,17 @@ return (
202202
);
203203
```
204204

205-
Це можна прочитати як *"якщо `isPacked` -- true, тоді (`?`) відобразити `name + ' ✔'`, в іншому випадку (`:`) відобразити `name`"*.
205+
Це можна прочитати як *"якщо `isPacked` є true, тоді (`?`) відобразити `name + ' ✔'`, в іншому випадку (`:`) відобразити `name`"*.
206206

207207
<DeepDive>
208208

209209
#### Чи ці два приклади повністю еквівалентні? {/*are-these-two-examples-fully-equivalent*/}
210210

211-
Якщо ви прийшли з об'єктно-орієнтованого програмування, ви можете припустити, що два приклади вище є трохи різними, оскільки один з них може створити два різних "екземпляри" `<li>`. Але JSX-елементи не є "екземплярами", оскільки вони не містять жодного внутрішнього стану і не є реальними вузлами DOM. Це легкі описи, подібні до креслень. Таким чином, ці два приклади, насправді, *є* абсолютно еквівалентними. [Збереження та скидання стану](/learn/preserving-and-resetting-state) детально розповідає про те, як це працює.
211+
Якщо у вас є досвід з об'єктно-орієнтованого програмування, ви можете припустити, що два приклади вище є трохи різними, оскільки один з них може створити дві різні "сутності" `<li>`. Але JSX-елементи не є "сутностями", оскільки вони не містять жодного внутрішнього стану і не є реальними вузлами DOM. Це легкі описи, подібні до креслень. Таким чином, ці два приклади, насправді, *є* абсолютно еквівалентними. [Збереження та скидання стану](/learn/preserving-and-resetting-state) детально розповідає про те, як це працює.
212212

213213
</DeepDive>
214214

215-
Тепер, скажімо, ви хочете обернути текст елемента в інший HTML-тег, наприклад `<del>`, щоб його перекреслити. Ви можете додати ще більше нових рядків і дужок, щоб було легше використовувати вкладенний JSX в кожному з випадків:
215+
Тепер, скажімо, ви хочете обгорнути текст елемента в інший HTML-тег, наприклад `<del>`, щоб його перекреслити. Ви можете додати ще більше нових рядків і дужок, щоб було легше використовувати вкладенний JSX в кожному з випадків:
216216

217217
<Sandpack>
218218

@@ -256,11 +256,11 @@ export default function PackingList() {
256256

257257
</Sandpack>
258258

259-
Цей стиль добре працює для простих умов, але використовуйте його з розумом. Якщо ваші компоненти стають заплутаними через занадто великі вкладені умовні розмітки, розгляньте можливість витягнення дочірніх компонентів, щоб все виглядало охайніше та зрозуміліше. У React розмітка є частиною вашого коду, тому ви можете використовувати такі інструменти, як змінні та функції, щоб спростити складні вирази.
259+
Цей стиль добре працює для простих умов, але використовуйте його з розумом. Якщо ваші компоненти стають заплутаними через велику вкладену умовну розмітку, подумайте над "розпакуванням" дочірніх компонентів, щоб все виглядало охайніше. У React розмітка є частиною вашого коду, тому ви можете використовувати такі інструменти, як змінні та функції, щоб спростити складні вирази.
260260

261261
### Логічний оператор AND (`&&`) {/*logical-and-operator-*/}
262262

263-
Інший поширений шорткат, з яким ви зіткнетеся -- [логічний оператор AND (`&&`) JavaScript.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND#:~:text=The%20logical%20AND%20(%20%26%26%20)%20operator,it%20returns%20a%20Boolean%20value.) Всередині компонентів React він часто з'являється, коли ви хочете відрендерити деякий JSX, коли умова є істинною, **або нічого не рендерити в іншому випадку.** З `&&` ви могли б умовно відрендерити позначку, лише якщо `isPacked` дорівнює `true`:
263+
Ще одне поширене скорочення, з яким ви зіткнетеся -- [логічний оператор AND (`&&`) JavaScript.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND#:~:text=The%20logical%20AND%20(%20%26%26%20)%20operator,it%20returns%20a%20Boolean%20value.) Всередині компонентів React він часто з'являється, коли ви хочете відрендерити деякий JSX, коли умова є `true`, **або нічого не рендерити в іншому випадку.** З `&&` ви могли б умовно відрендерити позначку, лише якщо `isPacked` є `true`:
264264

265265
```js
266266
return (
@@ -317,9 +317,9 @@ export default function PackingList() {
317317

318318
**Не ставте числа зліва від `&&`.**
319319

320-
Щоб перевірити умову, JavaScript автоматично перетворює ліву сторону на булеве значення. Однак, якщо ліва сторона дорівнює `0`, то весь вираз отримує це значення (`0`), і React з задоволенням відрендерить `0` замість нічого.
320+
Щоб перевірити умову, JavaScript автоматично перетворює ліву сторону на булеве значення. Однак, якщо ліва сторона є `0`, то весь вираз отримує це значення (`0`), і React з задоволенням відрендерить `0` замість нічого.
321321

322-
Наприклад, поширеною помилкою є написання коду типу `messageCount && <p>New messages</p>`. Легко припустити, що він не рендерить нічого, коли `messageCount` дорівнює `0`, але насправді він рендерить сам `0`!
322+
Наприклад, поширеною помилкою є написання коду типу `messageCount && <p>New messages</p>`. Легко припустити, що він нічого не рендерить, коли `messageCount` дорівнює `0`, але насправді він рендерить сам `0`!
323323

324324
Щоб виправити це, зробіть ліву сторону булевою: `messageCount > 0 && <p>New messages</p>`.
325325

@@ -341,7 +341,7 @@ if (isPacked) {
341341
}
342342
```
343343

344-
[Фігурні дужки відкривають "вікно в JavaScript".](/learn/javascript-in-jsx-with-curly-braces#using-curly-braces-a-window-into-the-javascript-world) Вбудуйте змінну з фігурними дужками в JSX-дерево, вкладаючи раніше обчислений вираз всередину JSX:
344+
[Фігурні дужки відкривають "вікно в JavaScript".](/learn/javascript-in-jsx-with-curly-braces#using-curly-braces-a-window-into-the-javascript-world) Вбудуйте змінну з фігурними дужками в повернене JSX-дерево, вкладаючи раніше обчислений вираз всередині JSX:
345345

346346
```js
347347
<li className="item">
@@ -437,7 +437,7 @@ export default function PackingList() {
437437

438438
</Sandpack>
439439

440-
Якщо ви не знайомі з JavaScript, цей різноманітний стиль може здатися вам спочатку приголомшливим. Однак, вивчення різних з них допоможе вам читати та писати будь-який код JavaScript -- і не тільки компоненти React! Виберіть той, який вам більше подобається для початку, а потім зверніться до цього довідника знову, якщо ви забудете, як працюють інші.
440+
Якщо ви не знайомі з JavaScript, то ця різноманітність стилів може спершу здатися вам занадто складною. Однак, їх знання допоможе вам читати та писати будь-який код JavaScript -- і не тільки компоненти React! Виберіть той, який вам більше подобається для початку, а потім зверніться до цього довідника знову, якщо ви забудете, як працюють інші.
441441

442442
<Recap>
443443

@@ -632,7 +632,7 @@ export default function PackingList() {
632632

633633
#### Рефакторінг послідовності `? :` на `if` та змінні {/*refactor-a-series-of---to-if-and-variables*/}
634634

635-
Цей компонент `Drink` використовує послідовність умов `? :` для відображення різної інформації в залежності від того, чи є проп `name` `"tea"` або `"coffee"`. Проблема в тому, що інформація про кожний напій розподілена між кількома умовами. Рефакторінг цього коду, щоб використовувати один `if` замість трьох умов `? :`.
635+
Цей компонент `Drink` використовує послідовність умов `? :` для відображення різної інформації в залежності від того, чи проп `name` є `"tea"` або `"coffee"`. Проблема в тому, що інформація про кожний напій розподілена між кількома умовами. Відрефакторіть цей код, щоб використовувати один `if` замість трьох умов `? :`.
636636

637637
<Sandpack>
638638

@@ -665,7 +665,7 @@ export default function DrinkList() {
665665

666666
</Sandpack>
667667

668-
Після того, як ви рефакторили код, щоб використовувати `if`, у вас є ідеї, як його можна спростити?
668+
Після того, як ви відрефакторили код, щоб використовувати `if`, у вас є ще ідеї, як його можна спростити?
669669

670670
<Solution>
671671

0 commit comments

Comments
 (0)