Skip to content

Commit eda13d0

Browse files
committed
list and keys: fix transaltion issues
1 parent 74f8eac commit eda13d0

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

content/docs/lists-and-keys.md

+25-25
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ prev: conditional-rendering.html
66
next: forms.html
77
---
88

9-
Сначала посмотрим как мы работаем со списками в JavaScript.
9+
Сначала давайте вспомним, как работать со списками в JavaScript.
1010

11-
В коде ниже мы используем функцию [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map), чтобы удвоить значения в массиве `numbers`. Мы присваиваем массив, возвращаемый из `map()`, в переменную `doubled` и выводим её в консоль:
11+
В коде ниже мы используем функцию [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map), чтобы удвоить значения в массиве `numbers`. Мы присваиваем массив, возвращаемый из `map()`, переменной `doubled` и выводим её в консоль:
1212

1313
```javascript{2}
1414
const numbers = [1, 2, 3, 4, 5];
@@ -22,9 +22,9 @@ console.log(doubled);
2222

2323
### Рендер нескольких компонентов {#rendering-multiple-components}
2424

25-
Вы можете создавать коллекции элементов и добавлять их в JSX [include them in JSX](/docs/introducing-jsx.html#embedding-expressions-in-jsx) с помощью фигурных скобок `{}`.
25+
Вы можете создавать коллекции элементов и [встраивать их в JSX](/docs/introducing-jsx.html#embedding-expressions-in-jsx) с помощью фигурных скобок `{}`.
2626

27-
Ниже, мы проходим по массиву `numbers`, используя функцию JavaScript [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map), и возвращаем элемент `<li>` в каждой итерации. В итоге мы присваиваем получившийся массив элементов в `listItems`:
27+
Ниже, мы проходим по массиву `numbers`, используя функцию JavaScript [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map), и возвращаем элемент `<li>` в каждой итерации. Получившийся массив элементов мы сохраним в `listItems`:
2828

2929
```javascript{2-4}
3030
const numbers = [1, 2, 3, 4, 5];
@@ -33,7 +33,7 @@ const listItems = numbers.map((number) =>
3333
);
3434
```
3535

36-
Затем добавляем массив `listItems` внутрь элемента `<ul>` и [рендерим в DOM](/docs/rendering-elements.html#rendering-an-element-into-the-dom):
36+
Затем включаем массив `listItems` внутрь элемента `<ul>` и [рендерим его в DOM](/docs/rendering-elements.html#rendering-an-element-into-the-dom):
3737

3838
```javascript{2}
3939
ReactDOM.render(
@@ -44,13 +44,13 @@ ReactDOM.render(
4444

4545
[**Try it on CodePen**](https://codepen.io/gaearon/pen/GjPyQr?editors=0011)
4646

47-
Данный код выведет ненумерованный список с числами от 1 до 5.
47+
Этот код выведет список чисел от 1 до 5.
4848

4949
### Простой компонент-список {#basic-list-component}
5050

51-
Обычно вы будете рендерить списки внутри [компонента](/docs/components-and-props.html).
51+
Как правило, вы будете рендерить списки внутри какого-нибудь [компонента](/docs/components-and-props.html).
5252

53-
Мы можем отрефакторить предыдущий пример с использованием компонента, который принимает массив `numbers` и выводит неупорядоченный список элементов.
53+
Мы можем отрефакторить предыдущий пример с использованием компонента, который принимает массив `numbers` и выводит список элементов.
5454

5555
```javascript{3-5,7,13}
5656
function NumberList(props) {
@@ -70,9 +70,9 @@ ReactDOM.render(
7070
);
7171
```
7272

73-
Когда вы запустите данный код, то увидите предупреждение о том, что у каждого элемента массива должен быть ключ. «Ключ» – это специальный строковый атрибут, который вам необходимо добавлять при создании списка элементов. Мы обсудим почему это важно в следующей главе.
73+
Когда вы запустите данный код, то увидите предупреждение о том, что у каждого элемента массива должен быть ключ (key). «Ключ» – это специальный строковый атрибут, который вам необходимо добавлять при создании списка элементов. Мы обсудим, почему это важно, ниже на странице.
7474

75-
Добавим `key` к нашему списку элементов внутри `numbers.map()` и поправим проблему его отсутствия.
75+
Чтобы исправить проблему с неуказанными ключами, добавим каждому элементу в списке атрибут `key`.
7676

7777
```javascript{4}
7878
function NumberList(props) {
@@ -98,7 +98,7 @@ ReactDOM.render(
9898

9999
## Ключи {#keys}
100100

101-
Ключи помогают React определять какие элементы были изменены, добавлены или удалены. Ключи нужно присваивать элементам внутри массива для их явной идентификации:
101+
Ключи помогают React определять, какие элементы были изменены, добавлены или удалены. Их необходимо указывать, чтобы React мог сопоставлять элементы массива с течением времени:
102102

103103
```js{3}
104104
const numbers = [1, 2, 3, 4, 5];
@@ -109,7 +109,7 @@ const listItems = numbers.map((number) =>
109109
);
110110
```
111111

112-
Лучший способ выбрать ключ это использовать строку, которая будет явно отличать элемент списка от его соседей. Чаще всего вы будете использовать ID из ваших данных как ключи:
112+
Лучший способ выбрать ключ это использовать строку, которая будет явно отличать элемент списка от его соседей. Чаще всего вы будете использовать ID из ваших данных как ключи:
113113

114114
```js{2}
115115
const todoItems = todos.map((todo) =>
@@ -119,26 +119,26 @@ const todoItems = todos.map((todo) =>
119119
);
120120
```
121121

122-
Когда у вас нет заданных ID для списка, то в крайнем случае можете использовать индекс элемента как ключ:
122+
Когда у вас нет заданных ID для списка, то в крайнем случае можно использовать индекс элемента как ключ:
123123

124124
```js{2,3}
125125
const todoItems = todos.map((todo, index) =>
126-
// Делайте так только если у элементов массива нет заданного ID
126+
// Делайте так, только если у элементов массива нет заданного ID
127127
<li key={index}>
128128
{todo.text}
129129
</li>
130130
);
131131
```
132132

133-
Мы не рекомендуем использовать индексы как ключи если порядок элементов может поменяться. Это негативно скажется на производительности и может вызвать проблемы с состоянием компонента. Посмотрите статью Робина Покорни (Robin Pokorny) с [подробным объяснением негативного влияния использования индексов как ключей](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318). Если вы решите не присваивать ключ к элементу списка, то React по умолчанию будет использовать индексы как ключи.
133+
Мы не рекомендуем использовать индексы как ключи, если порядок элементов может поменяться. Это негативно скажется на производительности и может вызвать проблемы с состоянием компонента. Почитайте статью Робина Покорни (Robin Pokorny), [которая объясняет, почему индексы-ключи приводят к проблемам](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318). Если вы опустите ключ для элемента в списке, то React по умолчанию будет использовать индексы как ключи.
134134

135-
Вот [подробное объяснение о том, почему ключи необходимы](/docs/reconciliation.html#recursing-on-children) если вы захотели узнать больше.
135+
Вот [подробное объяснение о том, почему ключи необходимы](/docs/reconciliation.html#recursing-on-children).
136136

137137
### Извлечение компонентов с ключами {#extracting-components-with-keys}
138138

139-
Ключи имеют значение только в пределах окружающего массива.
139+
Имеет смысл использовать ключи только в пределах окружающего массива.
140140

141-
Например если вы [извлекаете](/docs/components-and-props.html#extracting-components) компонент `ListItem`, то нужно указывать ключ для `<ListItem />` в массиве, вместо элементов `<li>` внутри самого `ListItem`.
141+
Например, если вы [извлекаете](/docs/components-and-props.html#extracting-components) компонент `ListItem`, то нужно указывать ключ для `<ListItem />` в массиве, а не в элементе `<li>` внутри самого `ListItem`.
142142

143143
**Пример неправильного использования ключей**
144144

@@ -177,14 +177,14 @@ ReactDOM.render(
177177

178178
```javascript{2,3,9,10}
179179
function ListItem(props) {
180-
// Correct! There is no need to specify the key here:
180+
// Правильно! Не нужно определять здесь ключ:
181181
return <li>{props.value}</li>;
182182
}
183183
184184
function NumberList(props) {
185185
const numbers = props.numbers;
186186
const listItems = numbers.map((number) =>
187-
// Correct! Key should be specified inside the array.
187+
// Правильно! Ключ нужно определять внутри массива:
188188
<ListItem key={number.toString()}
189189
value={number} />
190190
);
@@ -206,9 +206,9 @@ ReactDOM.render(
206206

207207
Как правило, элементам внутри `map()` нужны ключи.
208208

209-
### Ключи должны быть уникальными среди соседей {#keys-must-only-be-unique-among-siblings}
209+
### Ключи должны быть уникальными среди одноуровневых элементов {#keys-must-only-be-unique-among-siblings}
210210

211-
Ключам, которые используются в массивах, нужно быть уникальными среди своих соседей. Однако они не должны быть уникальными глобально. Мы можем использовать одни и те же ключи для создания двух разных массивов.
211+
Ключи внутри массива должны быть уникальными только среди своих одноуровневых элементов. Им не нужно быть уникальными глобально. Можно использовать один и тот же ключ в двух разных массивах.
212212

213213
```js{2,5,11,12,19,21}
214214
function Blog(props) {
@@ -248,7 +248,7 @@ ReactDOM.render(
248248

249249
[**Try it on CodePen**](https://codepen.io/gaearon/pen/NRZYGN?editors=0010)
250250

251-
Ключи являются подсказками для React, но они никогда не передаются в ваши компоненты. Если в компоненте нужно тоже самое значение, то передайте его явно через проп с другим именем:
251+
Ключи служат подсказками для React, но они никогда не передаются в ваши компоненты. Если в компоненте нужно то же самое значение, то передайте его явно через проп с другим именем:
252252

253253
```js{3,4}
254254
const content = posts.map((post) =>
@@ -280,7 +280,7 @@ function NumberList(props) {
280280
}
281281
```
282282

283-
JSX позволяет [встроить любое выражение](/docs/introducing-jsx.html#embedding-expressions-in-jsx) в фигурные скобки, так мы можем заинлайнить результат `map()`:
283+
JSX позволяет [встроить любое выражение](/docs/introducing-jsx.html#embedding-expressions-in-jsx) в фигурные скобки, так что мы можем включить результат выполнения `map()`:
284284

285285
```js{5-8}
286286
function NumberList(props) {
@@ -298,4 +298,4 @@ function NumberList(props) {
298298

299299
[**Try it on CodePen**](https://codepen.io/gaearon/pen/BLvYrB?editors=0010)
300300

301-
Иногда это приводит к более чистому коду, но таким стилем так же можно злоупотреблять. Как и в JavaScript вам придется самостоятельно решать стоит ли извлекать код в переменную для читабельности. Держите в голове, что если содержимое `map()` является слишком сложным, вероятно это отличная возможность чтобы [извлечь компонент](/docs/components-and-props.html#extracting-components).
301+
Иногда это приводит к более чистому коду, но бывает и наоборот. Как и в любом JavaScript-коде, вам придется самостоятельно решать стоит ли извлекать код в переменную для читабельности. Не забывайте, что если код внутри `map()` слишком громоздкий, имеет смысл [извлечь его в отдельный компонент](/docs/components-and-props.html#extracting-components).

0 commit comments

Comments
 (0)