Scientists
+Науковці
- {listItems}
diff --git a/TRANSLATION.md b/TRANSLATION.md
index 499aacae4..e8627af47 100644
--- a/TRANSLATION.md
+++ b/TRANSLATION.md
@@ -144,7 +144,7 @@
| React | React |
| React element | React-елемент, елемент React |
| reconciliation | узгодження |
-| render(ing) | рендер, рендерити |
+| render(ing) | рендер, рендерити (відрендерити) |
| re-render(ing) | повторний рендер |
| render prop | рендер-проп |
| render props | рендер-пропси |
diff --git a/src/content/learn/rendering-lists.md b/src/content/learn/rendering-lists.md
index 108e394e2..c0a2e547b 100644
--- a/src/content/learn/rendering-lists.md
+++ b/src/content/learn/rendering-lists.md
@@ -1,74 +1,74 @@
---
-title: Rendering Lists
+title: Рендеринг списків
---
{person.name}: - {' ' + person.profession + ' '} - known for {person.accomplishment} + {' ' + person.profession + ', '} + чиєю працею є {person.accomplishment}
); ``` -3. Lastly, **return** the `listItems` from your component: +3. Наостанок **поверніть** `listItems` з вашого компонента: ```js return{person.name}: - {' ' + person.profession + ' '} - known for {person.accomplishment} + {' ' + person.profession + ', '} + чиєю працею є {person.accomplishment}
{person.name} - {' ' + person.profession + ' '} - known for {person.accomplishment} + {' ' + person.profession + ', '} + чиєю працею є {person.accomplishment}
); @@ -317,33 +317,33 @@ export default function List() { ```js src/data.js active export const people = [{ id: 0, // Used in JSX as a key - name: 'Creola Katherine Johnson', - profession: 'mathematician', - accomplishment: 'spaceflight calculations', + name: 'Кетрін Джонсон (Creola Katherine Johnson)', + profession: 'математик', + accomplishment: 'розрахунки для космічних польотів', imageId: 'MK3eW3A' }, { id: 1, // Used in JSX as a key - name: 'Mario José Molina-Pasquel Henríquez', - profession: 'chemist', - accomplishment: 'discovery of Arctic ozone hole', + name: 'Маріо Моліна (Mario José Molina-Pasquel Henríquez)', + profession: 'хімік', + accomplishment: 'відкриття озонової діри в Арктиці', imageId: 'mynHUSa' }, { id: 2, // Used in JSX as a key - name: 'Mohammad Abdus Salam', - profession: 'physicist', - accomplishment: 'electromagnetism theory', + name: 'Абдус Салам (Moшинкаmad Abdus Salam)', + profession: 'фізик', + accomplishment: 'теорія електромагнетизму', imageId: 'bE7W1ji' }, { id: 3, // Used in JSX as a key - name: 'Percy Lavon Julian', - profession: 'chemist', - accomplishment: 'pioneering cortisone drugs, steroids and birth control pills', + name: 'Персі Джуліан (Percy Lavon Julian)', + profession: 'хімік', + accomplishment: 'новаторські кортизоновмісні препарати, стероїди та протизаплідні таблетки', imageId: 'IOjWm71' }, { id: 4, // Used in JSX as a key - name: 'Subrahmanyan Chandrasekhar', - profession: 'astrophysicist', - accomplishment: 'white dwarf star mass calculations', + name: 'Субрахманьян Чандрасекар (Subrahmanyan Chandrasekhar)', + profession: 'астрофізик', + accomplishment: 'розрахунок мас зір категорії "білий карлик"', imageId: 'lrWQx8l' }]; ``` @@ -374,11 +374,11 @@ img { width: 100px; height: 100px; border-radius: 50%; }`, `
`, and so on. +Фрагменти зникають із DOM, тому тут буде створено однорівневий список елементів: `
`, `
` і так далі.
-### Where to get your `key` {/*where-to-get-your-key*/}
+### Де взяти `key` {/*where-to-get-your-key*/}
-Different sources of data provide different sources of keys:
+Різні джерела даних надають різні джерела ключів:
-* **Data from a database:** If your data is coming from a database, you can use the database keys/IDs, which are unique by nature.
-* **Locally generated data:** If your data is generated and persisted locally (e.g. notes in a note-taking app), use an incrementing counter, [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) or a package like [`uuid`](https://www.npmjs.com/package/uuid) when creating items.
+* **Дані з бази даних:** Якщо ваші дані надходять із бази даних, ви можете використовувати ключі/ідентифікатори бази даних, які є унікальними за своєю природою.
+* **Локально створені дані:** Якщо ваші дані генеруються та зберігаються локально (наприклад, нотатки в застосунку для створення нотаток), використовуйте лічильник з інкрементом під час створення елементів — [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) або пакет на зразок [`uuid.`](https://www.npmjs.com/package/uuid)
-### Rules of keys {/*rules-of-keys*/}
+### Правила для ключів {/*rules-of-keys*/}
-* **Keys must be unique among siblings.** However, it’s okay to use the same keys for JSX nodes in _different_ arrays.
-* **Keys must not change** or that defeats their purpose! Don't generate them while rendering.
+* **Ключі мають бути унікальними для елементів одного рівня.** Проте можна використовувати однакові ключі для вузлів JSX у _різних_ масивах.
+* **Ключі не повинні змінюватися**, бо інакше це не відповідає їхньому призначенню! Не створюйте їх під час рендерингу.
-### Why does React need keys? {/*why-does-react-need-keys*/}
+### Навіщо React потрібні ключі? {/*why-does-react-need-keys*/}
-Imagine that files on your desktop didn't have names. Instead, you'd refer to them by their order -- the first file, the second file, and so on. You could get used to it, but once you delete a file, it would get confusing. The second file would become the first file, the third file would be the second file, and so on.
+Уявіть, що файли на вашому робочому столі не мають імен. Замість цього ви посилаєтеся на них по порядку — перший файл, другий файл тощо. Ви можете звикнути до цього, але як тільки ви видалите файл, все сплутається. Другий файл стане першим файлом, третій файл стане другим файлом і так далі.
-File names in a folder and JSX keys in an array serve a similar purpose. They let us uniquely identify an item between its siblings. A well-chosen key provides more information than the position within the array. Even if the _position_ changes due to reordering, the `key` lets React identify the item throughout its lifetime.
+Імена файлів у каталозі та JSX-ключі у масиві мають схожу мету. Вони дозволяють нам унікально ідентифікувати об'єкт на одному рівні. Добре підібраний ключ надає більше інформації, ніж позиція у масиві. Навіть якщо _позиція_ змінюється через під час зміни порядку, `key` дозволяє React ідентифікувати елемент протягом усього його життя.
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession + ', '}
+ чиєю працею є {person.accomplishment}
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession + ', '}
+ чиєю працею є {person.accomplishment}
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession + ', '}
+ чиєю працею є {person.accomplishment}
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession + ', '}
+ чиєю працею є {person.accomplishment}
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession + ', '}
+ чиєю працею є {person.accomplishment}
` tag. Your job is to insert an ` `. Ваше завдання полягає в тому, щоб вставити роздільник ` I write, erase, rewrite Пишу, стираю, Erase again, and then Переписую знову — A poppy blooms. І ось мак зацвів. ` elements, not in the beginning or the end!
+Хайку містить лише три рядки, але ваше рішення має працювати з будь-якою кількістю рядків. Зауважте, що елементи ` `, а не на початку або в кінці!
... ... ... ...Scientists
+ Науковці
{listItems}
Scientists
- Chemists
+ Науковці
+ Хіміки
{chemists.map(person =>
- Everyone Else
+ Усі інші
{everyoneElse.map(person =>
` elements, but you could introduce variables for them if you find that more readable.
+У цьому рішенні виклики `map` розміщуються безпосередньо в батьківських елементах `
`, але ви можете ввести змінні для них, якщо вважаєте це більш зрозумілим.
-There is still a bit duplication between the rendered lists. You can go further and extract the repetitive parts into a `
Scientists
+ Науковці
Scientists
+ Науковці
` and list its ingredients in a `
`.
+Складіть список рецептів із цього масиву! Для кожного рецепта в масиві відобразіть його назву як `
` і перелічіть його інгредієнти в `
`.
Recipes
+ Рецепти
Recipes
+ Рецепти
{recipes.map(recipe =>
{recipe.name}
@@ -957,28 +957,28 @@ export default function RecipeList() {
```js src/data.js
export const recipes = [{
id: 'greek-salad',
- name: 'Greek Salad',
- ingredients: ['tomatoes', 'cucumber', 'onion', 'olives', 'feta']
+ name: 'Грецький салат',
+ ingredients: ['помідори', 'огірки', 'цибуля', 'оливки', 'фета']
}, {
id: 'hawaiian-pizza',
- name: 'Hawaiian Pizza',
- ingredients: ['pizza crust', 'pizza sauce', 'mozzarella', 'ham', 'pineapple']
+ name: 'Гавайська піца',
+ ingredients: ['тісто для піци', 'соус для піци', 'моцарела', 'шинка', 'ананас']
}, {
id: 'hummus',
- name: 'Hummus',
- ingredients: ['chickpeas', 'olive oil', 'garlic cloves', 'lemon', 'tahini']
+ name: 'Хумус',
+ ingredients: ['нут', 'оливкова олія', 'зубчики часнику', 'лимон', 'тахіні']
}];
```
-Each of the `recipes` already includes an `id` field, so that's what the outer loop uses for its `key`. There is no ID you could use to loop over ingredients. However, it's reasonable to assume that the same ingredient won't be listed twice within the same recipe, so its name can serve as a `key`. Alternatively, you could change the data structure to add IDs, or use index as a `key` (with the caveat that you can't safely reorder ingredients).
+Кожен із рецептів у `recipes` вже містить поле `id`, яке зовнішній цикл використовує як свій `key`. Але немає жодного ідентифікатора, що можна використати для перегляду інгредієнтів. Однак доречно припустити, що один і той самий інгредієнт не буде вказано двічі в одному рецепті, тому вже сама його назва може бути `key`. В якості альтернативи ви можете змінити структуру даних, щоб додати ідентифікатори, або використовувати індекс як `key` (із застереженням, що ви не можете безпечно змінити порядок інгредієнтів).
-#### Extracting a list item component {/*extracting-a-list-item-component*/}
+#### Винесення компонента елемента списку {/*extracting-a-list-item-component*/}
-This `RecipeList` component contains two nested `map` calls. To simplify it, extract a `Recipe` component from it which will accept `id`, `name`, and `ingredients` props. Where do you place the outer `key` and why?
+Цей компонент `RecipeList` містить два вкладених виклики `map`. Щоб спростити це, винесіть із нього компонент `Recipe`, який матиме пропси `id`, `name` та `ingredients`. Де і навіщо ви розмістите зовнішній `key`?
Recipes
+ Рецепти
{recipes.map(recipe =>
{recipe.name}
@@ -1009,16 +1009,16 @@ export default function RecipeList() {
```js src/data.js
export const recipes = [{
id: 'greek-salad',
- name: 'Greek Salad',
- ingredients: ['tomatoes', 'cucumber', 'onion', 'olives', 'feta']
+ name: 'Грецький салат',
+ ingredients: ['помідори', 'огірки', 'цибуля', 'оливки', 'фета']
}, {
id: 'hawaiian-pizza',
- name: 'Hawaiian Pizza',
- ingredients: ['pizza crust', 'pizza sauce', 'mozzarella', 'ham', 'pineapple']
+ name: 'Гавайська піца',
+ ingredients: ['тісто для піци', 'соус для піци', 'моцарела', 'шинка', 'ананас']
}, {
id: 'hummus',
- name: 'Hummus',
- ingredients: ['chickpeas', 'olive oil', 'garlic cloves', 'lemon', 'tahini']
+ name: 'Хумус',
+ ingredients: ['нут', 'оливкова олія', 'зубчики часнику', 'лимон', 'тахіні']
}];
```
@@ -1026,7 +1026,7 @@ export const recipes = [{
Recipes
+ Рецепти
{recipes.map(recipe =>
` separator between each paragraph. Your resulting structure should look like this:
+У цьому прикладі відображається відоме хайку _(ред. — у вільному перекладі)_ автора Тачібана Хокуші (Tachibana Hokushi), кожен рядок якого обгорнуто тегом `
` між кожним абзацом. Ваша кінцева структура має виглядати так:
```js
-
-
` elements only appear *between* the `
` з'являються лише *між* елементами `
` and `
` і `
@@ -1178,7 +1178,7 @@ export default function Poem() {
+ // Видалити перший
output.shift();
return (
@@ -1206,9 +1206,9 @@ hr {
-Using the original line index as a `key` doesn't work anymore because each separator and paragraph are now in the same array. However, you can give each of them a distinct key using a suffix, e.g. `key={i + '-text'}`.
+Використання початкового індексу рядка як `key` більше не працює, оскільки кожен роздільник і абзац тепер знаходяться в одному масиві. Однак ви можете надати кожному з них окремий ключ за допомогою суфікса, наприклад, `key={i + '-text'}`.
-Alternatively, you could render a collection of Fragments which contain `
` and `
` і `