`:](/reference/react/Fragment#rendering-a-list-of-fragments)
```js
import { Fragment } from 'react';
@@ -393,46 +393,46 @@ const listItems = people.map(person =>
);
```
-Fragments disappear from the DOM, so this will produce a flat list of ``, `
`, `
`, `
`, 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.
+* **Даныя з базы даных:** Калі вашы даныя прыходзяць з базы даных, вы можаце выкарыстоўваць ключы/ID з базы даных, якія па сваёй прыродзе з'яўляюцца ўнікальнымі.
+* **Лакальна згенераваныя даныя:** Калі вашы даныя згенерыраваны і захоўваюцца лакальна (напрыклад, нататкі ў праграме для вядзення нататак), выкарыстоўвайце інкрэментны лічыльнік [`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 ідэнтыфікаваць элемент на працягу ўсяго яго існавання.
-You might be tempted to use an item's index in the array as its key. In fact, that's what React will use if you don't specify a `key` at all. But the order in which you render items will change over time if an item is inserted, deleted, or if the array gets reordered. Index as a key often leads to subtle and confusing bugs.
+У вас можа ўзнікнуць спакуса выкарыстоўваць індэкс элемента ў масіве ў якасці ключа. Дарэчы, гэта тое, што React будзе выкарыстоўваць, калі вы не ўкажаце `key`. Але парадак, у якім вы рэндэрыце элементы, можа памяняцца з часам, калі які-небудзь элемент будзе ўстаўлены, выдалены або калі масіў будзе пераўпарадкаваны. Індэкс у якасці ключа часта прыводзіць да каварных памылак і памылак, што могуць збіваць з толку.
-Similarly, do not generate keys on the fly, e.g. with `key={Math.random()}`. This will cause keys to never match up between renders, leading to all your components and DOM being recreated every time. Not only is this slow, but it will also lose any user input inside the list items. Instead, use a stable ID based on the data.
+Аналагічна, не генеруйце ключы на ляту, напрыклад, з дапамогай `key={Math.random()}`. Гэта прывядзе да таго, што ключы ніколі не будуць супадаць паміж рэндэрамі, што прывядзе да перастварэння ўсіх вашых кампанентаў і DOM пры кожным рэндэры. Гэта не толькі павольна, але і прывядзе да страты любых даных уведзеных карыстальнікам унутры элементаў спіса. Замест гэтага выкарыстоўвайце стабільны ідэнтыфікатар, заснаваны на даных.
-Note that your components won't receive `key` as a prop. It's only used as a hint by React itself. If your component needs an ID, you have to pass it as a separate prop: ``.
+Звярніце ўвагу, што вашыя кампаненты не атрымаюць `key` у якасці пропса. Ён выкарыстоўваецца толькі як падказка для React. Калі вашаму кампаненту патрэбны ідэнтыфікатар, вы мусіце перадаць яго як асобны пропс: ``.
-On this page you learned:
+На гэтай старонцы вы даведаліся:
-* How to move data out of components and into data structures like arrays and objects.
-* How to generate sets of similar components with JavaScript's `map()`.
-* How to create arrays of filtered items with JavaScript's `filter()`.
-* Why and how to set `key` on each component in a collection so React can keep track of each of them even if their position or data changes.
+* Як перамясціць даныя з кампанентаў у такія структуры даных, як масівы і аб'екты.
+* Як стварыць наборы падобных кампанентаў з дапамогай JavaScript метаду `map()` .
+* Як ствараць масівы адфільтраваных элементаў з дапамогай JavaScript метаду `filter()`.
+* Навошта і як задаваць `key` для кожнага кампанента ў калекцыі, каб React мог адсочваць кожны з іх, нават калі іх пазіцыя або даныя змяняюцца.
@@ -440,11 +440,11 @@ On this page you learned:
-#### Splitting a list in two {/*splitting-a-list-in-two*/}
+#### Падзел спісу на два {/*splitting-a-list-in-two*/}
-This example shows a list of all people.
+У гэтым прыкладзе паказаны спіс усіх людзей.
-Change it to show two separate lists one after another: **Chemists** and **Everyone Else.** Like previously, you can determine whether a person is a chemist by checking if `person.profession === 'chemist'`.
+Змяніце яго так, каб паказаць два асобныя спісы адзін за адным: **Хімікі** і **Усе астатнія.** Як і раней, вы можаце вызначыць, ці з'яўляецца чалавек хімікам, праверыўшы `person.profession === 'хімік'`.
@@ -461,14 +461,14 @@ export default function List() {
/>
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession}.
+ Галоўнае дасягненне: {person.accomplishment}
);
return (
- Scientists
+ Вучоныя
);
@@ -478,33 +478,33 @@ export default function List() {
```js data.js
export const people = [{
id: 0,
- name: 'Creola Katherine Johnson',
- profession: 'mathematician',
- accomplishment: 'spaceflight calculations',
+ name: 'Крэола Кэтрын Джонсан',
+ profession: 'матэматык',
+ accomplishment: 'разлікі для касмічных палётаў',
imageId: 'MK3eW3A'
}, {
id: 1,
- name: 'Mario José Molina-Pasquel Henríquez',
- profession: 'chemist',
- accomplishment: 'discovery of Arctic ozone hole',
+ name: 'Марыа Хасэ Маліна-Паскель Энрыкес',
+ profession: 'хімік',
+ accomplishment: 'адкрыццё арктычнай азонавай дзіркі',
imageId: 'mynHUSa'
}, {
id: 2,
- name: 'Mohammad Abdus Salam',
- profession: 'physicist',
- accomplishment: 'electromagnetism theory',
+ name: 'Махамад Абдус Салам',
+ profession: 'фізік',
+ accomplishment: 'тэорыя электрамагнетызму',
imageId: 'bE7W1ji'
}, {
id: 3,
- name: 'Percy Lavon Julian',
- profession: 'chemist',
- accomplishment: 'pioneering cortisone drugs, steroids and birth control pills',
+ name: 'Персі Лавон Джуліан',
+ profession: 'хімік',
+ accomplishment: 'піянер у вытворчасці картызону, стэроідаў і супрацьзачаткавых таблетак',
imageId: 'IOjWm71'
}, {
id: 4,
- name: 'Subrahmanyan Chandrasekhar',
- profession: 'astrophysicist',
- accomplishment: 'white dwarf star mass calculations',
+ name: 'Субрахманьян Чандрасекар',
+ profession: 'астрафізік',
+ accomplishment: 'разлік масы белага карліка',
imageId: 'lrWQx8l'
}];
```
@@ -535,7 +535,7 @@ img { width: 100px; height: 100px; border-radius: 50%; }
-You could use `filter()` twice, creating two separate arrays, and then `map` over both of them:
+Вы можаце выкарыстоўваць `filter()` двойчы, стварыўшы два асобныя масівы, а затым выкарыстаць `map()` на абодвух:
@@ -545,15 +545,15 @@ import { getImageUrl } from './utils.js';
export default function List() {
const chemists = people.filter(person =>
- person.profession === 'chemist'
+ person.profession === 'хімік'
);
const everyoneElse = people.filter(person =>
- person.profession !== 'chemist'
+ person.profession !== 'хімік'
);
return (
- Scientists
- Chemists
+ Вучоныя
+ Хімікі
- Everyone Else
+ Усе астатнія
-In this solution, the `map` calls are placed directly inline into the parent `` 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 `` component:
+Паміж спісамі ўсё яшчэ існуе невялікае дубліраванне. Вы можаце пайсці далей і вынесці часткі, якія паўтараюцца, у кампанент ``:
@@ -671,8 +671,8 @@ function ListSection({ title, people }) {
/>
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession}.
+ Галоўнае дасягненне: {person.accomplishment}
)}
@@ -683,20 +683,20 @@ function ListSection({ title, people }) {
export default function List() {
const chemists = people.filter(person =>
- person.profession === 'chemist'
+ person.profession === 'хімік'
);
const everyoneElse = people.filter(person =>
- person.profession !== 'chemist'
+ person.profession !== 'хімік'
);
return (
- Scientists
+ Вучоныя
@@ -707,33 +707,33 @@ export default function List() {
```js data.js
export const people = [{
id: 0,
- name: 'Creola Katherine Johnson',
- profession: 'mathematician',
- accomplishment: 'spaceflight calculations',
+ name: 'Крэола Кэтрын Джонсан',
+ profession: 'матэматык',
+ accomplishment: 'разлікі для касмічных палётаў',
imageId: 'MK3eW3A'
}, {
id: 1,
- name: 'Mario José Molina-Pasquel Henríquez',
- profession: 'chemist',
- accomplishment: 'discovery of Arctic ozone hole',
+ name: 'Марыа Хасэ Маліна-Паскель Энрыкес',
+ profession: 'хімік',
+ accomplishment: 'адкрыццё арктычнай азонавай дзіркі',
imageId: 'mynHUSa'
}, {
id: 2,
- name: 'Mohammad Abdus Salam',
- profession: 'physicist',
- accomplishment: 'electromagnetism theory',
+ name: 'Махамад Абдус Салам',
+ profession: 'фізік',
+ accomplishment: 'тэорыя электрамагнетызму',
imageId: 'bE7W1ji'
}, {
id: 3,
- name: 'Percy Lavon Julian',
- profession: 'chemist',
- accomplishment: 'pioneering cortisone drugs, steroids and birth control pills',
+ name: 'Персі Лавон Джуліан',
+ profession: 'хімік',
+ accomplishment: 'піянер у вытворчасці картызону, стэроідаў і супрацьзачаткавых таблетак',
imageId: 'IOjWm71'
}, {
id: 4,
- name: 'Subrahmanyan Chandrasekhar',
- profession: 'astrophysicist',
- accomplishment: 'white dwarf star mass calculations',
+ name: 'Субрахманьян Чандрасекар',
+ profession: 'астрафізік',
+ accomplishment: 'разлік масы белага карліка',
imageId: 'lrWQx8l'
}];
```
@@ -762,9 +762,9 @@ img { width: 100px; height: 100px; border-radius: 50%; }
-A very attentive reader might notice that with two `filter` calls, we check each person's profession twice. Checking a property is very fast, so in this example it's fine. If your logic was more expensive than that, you could replace the `filter` calls with a loop that manually constructs the arrays and checks each person once.
+Вельмі ўважлівы чытач можа заўважыць, што пры двух выкліках метаду `filter` мы двойчы правяраем прафесію кожнага чалавека. Праверка ўласцівасці працуе вельмі хутка, таму ў гэтым прыкладзе гэта нармальна. Калі б ваша логіка была больш затратная, вы маглі б замяніць выклікі метаду `filter` цыклам, які ўручную стварае масівы і правярае кожнага чалавека адзін раз.
-In fact, if `people` never change, you could move this code out of your component. From React's perspective, all that matters is that you give it an array of JSX nodes in the end. It doesn't care how you produce that array:
+На самай справе, калі `people` ніколі не мяняецца, вы можаце вынесці гэты код са свайго кампанента. З пункту гледжання React, адзінае, што мае значэнне, гэта тое, што ў канцы вы даяце яму масіў JSX вузлоў. React не важна, як вы ствараеце гэты масіў:
@@ -775,7 +775,7 @@ import { getImageUrl } from './utils.js';
let chemists = [];
let everyoneElse = [];
people.forEach(person => {
- if (person.profession === 'chemist') {
+ if (person.profession === 'хімік') {
chemists.push(person);
} else {
everyoneElse.push(person);
@@ -795,8 +795,8 @@ function ListSection({ title, people }) {
/>
{person.name}:
- {' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {' ' + person.profession}.
+ Галоўнае дасягненне: {person.accomplishment}
)}
@@ -810,11 +810,11 @@ export default function List() {
Scientists
@@ -825,33 +825,33 @@ export default function List() {
```js data.js
export const people = [{
id: 0,
- name: 'Creola Katherine Johnson',
- profession: 'mathematician',
- accomplishment: 'spaceflight calculations',
+ name: 'Крэола Кэтрын Джонсан',
+ profession: 'матэматык',
+ accomplishment: 'разлікі для касмічных палётаў',
imageId: 'MK3eW3A'
}, {
id: 1,
- name: 'Mario José Molina-Pasquel Henríquez',
- profession: 'chemist',
- accomplishment: 'discovery of Arctic ozone hole',
+ name: 'Марыа Хасэ Маліна-Паскель Энрыкес',
+ profession: 'хімік',
+ accomplishment: 'адкрыццё арктычнай азонавай дзіркі',
imageId: 'mynHUSa'
}, {
id: 2,
- name: 'Mohammad Abdus Salam',
- profession: 'physicist',
- accomplishment: 'electromagnetism theory',
+ name: 'Махамад Абдус Салам',
+ profession: 'фізік',
+ accomplishment: 'тэорыя электрамагнетызму',
imageId: 'bE7W1ji'
}, {
id: 3,
- name: 'Percy Lavon Julian',
- profession: 'chemist',
- accomplishment: 'pioneering cortisone drugs, steroids and birth control pills',
+ name: 'Персі Лавон Джуліан',
+ profession: 'хімік',
+ accomplishment: 'піянер у вытворчасці картызону, стэроідаў і супрацьзачаткавых таблетак',
imageId: 'IOjWm71'
}, {
id: 4,
- name: 'Subrahmanyan Chandrasekhar',
- profession: 'astrophysicist',
- accomplishment: 'white dwarf star mass calculations',
+ name: 'Субрахманьян Чандрасекар',
+ profession: 'астрафізік',
+ accomplishment: 'разлік масы белага карліка',
imageId: 'lrWQx8l'
}];
```
@@ -882,13 +882,13 @@ img { width: 100px; height: 100px; border-radius: 50%; }
-#### Nested lists in one component {/*nested-lists-in-one-component*/}
+#### Укладзеныя спісы ў адным кампаненце {/*nested-lists-in-one-component*/}
-Make a list of recipes from this array! For each recipe in the array, display its name as an `` and list its ingredients in a ``.
+Стварыце спіс рэцэптаў з гэтага масіву! Для кожнага рэцэпту ў масіве пакажыце яго назву ўнутры `` і пералічыце інгрэдыенты ў ``.
-This will require nesting two different `map` calls.
+Для гэтага спатрэбіцца ўкладанне двух розных выклікаў метаду `map`.
@@ -900,7 +900,7 @@ import { recipes } from './data.js';
export default function RecipeList() {
return (
-
Recipes
+ Рэцэпты
);
}
@@ -909,16 +909,16 @@ export default function RecipeList() {
```js 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: ['нут', 'аліўкавы алей', 'зубкі часнаку', 'лімон', 'тахіні']
}];
```
@@ -926,7 +926,7 @@ export const recipes = [{
-Here is one way you could go about it:
+Вось адзін са спосабаў, як вы можаце гэта зрабіць:
@@ -936,7 +936,7 @@ import { recipes } from './data.js';
export default function RecipeList() {
return (
-
Recipes
+
Рэцэпты
{recipes.map(recipe =>
{recipe.name}
@@ -957,28 +957,28 @@ export default function RecipeList() {
```js 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` і чаму?
@@ -988,7 +988,7 @@ import { recipes } from './data.js';
export default function RecipeList() {
return (
-
Recipes
+
Рэцэпты
{recipes.map(recipe =>
{recipe.name}
@@ -1009,16 +1009,16 @@ export default function RecipeList() {
```js 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 = [{
-You can copy-paste the JSX from the outer `map` into a new `Recipe` component and return that JSX. Then you can change `recipe.name` to `name`, `recipe.id` to `id`, and so on, and pass them as props to the `Recipe`:
+Вы можаце скапіяваць і ўставіць JSX са знешняга выкліку метаду `map` у новы кампанент `Recipe` і вярнуць гэты JSX. Затым вы можаце змяніць `recipe.name` на `name`, `recipe.id` на `id`, і гэтак далей, і перадаць іх у якасці пропсаў у `Recipe`:
@@ -1063,51 +1063,51 @@ export default function RecipeList() {
```js 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: ['нут', 'аліўкавы алей', 'зубкі часнаку', 'лімон', 'тахіні']
}];
```
-Here, `` is a syntax shortcut saying "pass all properties of the `recipe` object as props to the `Recipe` component". You could also write each prop explicitly: ``.
+Тут `` — гэта скарочаны сінтаксіс, які кажа «перадаць усе ўласцівасці аб'екта `recipe` як пропсы ў кампанент `Recipe`». Вы таксама можаце напісаць кожны пропс яўна: ``.
-**Note that the `key` is specified on the `` itself rather than on the root `` returned from `Recipe`.** This is because this `key` is needed directly within the context of the surrounding array. Previously, you had an array of `
`s so each of them needed a `key`, but now you have an array of `
`s. In other words, when you extract a component, don't forget to leave the `key` outside the JSX you copy and paste.
+**Звярніце ўвагу, што `key` пазначаны ў самім кампаненце ``, а не ў каранёвым ``, які вяртаецца з `Recipe`.** Усё таму, што гэты `key` неабходны непасрэдна ў кантэксце навакольнага масіву. Раней у вас быў масіў `
`, таму кожнаму з іх быў патрэбны ключ, але цяпер у вас ёсць масіў `
`. Іншымі словамі, калі вы выносіце кампанент, не забывайце пакідаць `key` па-за JSX, які вы капіюеце і ўстаўляеце.
-#### List with a separator {/*list-with-a-separator*/}
+#### Спіс з раздзяляльнікам {/*list-with-a-separator*/}
-This example renders a famous haiku by Katsushika Hokusai, with each line wrapped in a `` tag. Your job is to insert an `
` separator between each paragraph. Your resulting structure should look like this:
+У гэтым прыкладзе рэндэрыцца знакамітае хайку Кацусіка Хокусая, кожны радок якога абгорнуты тэгам ``. Ваша задача — уставіць раздзяляльнік `
` паміж кожным абзацам. Ваша выніковая структура павінна выглядаць так:
```js
- I write, erase, rewrite
+ Я пішу, сціраю, перапісваю
- Erase again, and then
+ Сціраю зноў, а потым
- A poppy blooms.
+ Зацвіў мак.
```
-A haiku only contains three lines, but your solution should work with any number of lines. Note that `
` elements only appear *between* the `` elements, not in the beginning or the end!
+Хайку змяшчае толькі тры радкі, але ваша рашэнне павінна працаваць з любой колькасцю радкоў. Звярніце ўвагу, што элементы `
` павінны быць толькі *паміж* элементамі ``, а не ў пачатку або ў канцы!
```js
const poem = {
lines: [
- 'I write, erase, rewrite',
- 'Erase again, and then',
- 'A poppy blooms.'
+ 'Я пішу, сціраю, перапісваю',
+ 'Сціраю зноў, а потым',
+ 'Зацвіў мак.'
]
};
@@ -1141,33 +1141,33 @@ hr {
-(This is a rare case where index as a key is acceptable because a poem's lines will never reorder.)
+(Гэта рэдкі выпадак, калі выкарыстоўванне індэкса ў якасці ключа — прымальны варыянт, таму што парадак радкоў верша ніколі не будзе зменены.)
-You'll either need to convert `map` to a manual loop, or use a fragment.
+Вам трэба альбо пераўтварыць `map` у звычайны цыкл, альбо выкарыстоўваць фрагмент.
-You can write a manual loop, inserting `
` and `...
` into the output array as you go:
+Вы можаце выкарыстоўваць звычайны цыкл, устаўляючы `
` і `...
` у выхадны масіў па ходзе выканання:
```js
const poem = {
lines: [
- 'I write, erase, rewrite',
- 'Erase again, and then',
- 'A poppy blooms.'
+ 'Я пішу, сціраю, перапісваю',
+ 'Сціраю зноў, а потым',
+ 'Зацвіў мак.'
]
};
export default function Poem() {
let output = [];
- // Fill the output array
+ // Запоўненне выхаднога масіву
poem.lines.forEach((line, i) => {
output.push(
@@ -1178,7 +1178,7 @@ export default function Poem() {
);
});
- // Remove the first
+ // Выдаляем першы
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 `...
`. However, the `<>...>` shorthand syntax doesn't support passing keys, so you'd have to write `` explicitly:
+У якасці альтэрнатывы вы можаце стварыць калекцыю фрагментаў, якія змяшчаюць `
` і `...
`. Аднак скарочаны сінтаксіс `<>...>` не падтрымлівае перадачу ключоў, таму вам трэба напісаць `` відавочна:
@@ -1217,9 +1217,9 @@ import { Fragment } from 'react';
const poem = {
lines: [
- 'I write, erase, rewrite',
- 'Erase again, and then',
- 'A poppy blooms.'
+ 'Я пішу, сціраю, перапісваю',
+ 'Сціраю зноў, а потым',
+ 'Зацвіў мак.'
]
};
@@ -1254,7 +1254,7 @@ hr {
-Remember, fragments (often written as `<> >`) let you group JSX nodes without adding extra ``s!
+Памятайце, што фрагменты (часта пішуцца як `<> >`) дазваляюць групаваць JSX вузлы без дадавання дадатковых `
`!