Skip to content

Commit cd1be99

Browse files
zhaozhimingQC-L
authored andcommitted
docs(cn): translate content/docs/lists-and-keys.md into Chinese (#41)
1 parent 212e0f7 commit cd1be99

File tree

1 file changed

+43
-43
lines changed

1 file changed

+43
-43
lines changed

content/docs/lists-and-keys.md

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
---
22
id: lists-and-keys
3-
title: Lists and Keys
3+
title: 列表 & Keys
44
permalink: docs/lists-and-keys.html
55
prev: conditional-rendering.html
66
next: forms.html
77
---
88

9-
First, let's review how you transform lists in JavaScript.
9+
首先,让我们看下在 Javascript 中如何转化列表。
1010

11-
Given the code below, we use the [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) function to take an array of `numbers` and double their values. We assign the new array returned by `map()` to the variable `doubled` and log it:
11+
如下代码,我们使用 [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) 函数让数组中的每一项变双倍,然后我们得到了一个新的列表 `doubled`并打印出来:
1212

1313
```javascript{2}
1414
const numbers = [1, 2, 3, 4, 5];
1515
const doubled = numbers.map((number) => number * 2);
1616
console.log(doubled);
1717
```
1818

19-
This code logs `[2, 4, 6, 8, 10]` to the console.
19+
代码打印出 `[2, 4, 6, 8, 10]`
2020

21-
In React, transforming arrays into lists of [elements](/docs/rendering-elements.html) is nearly identical.
21+
React 中,把数组转化为[元素](/docs/rendering-elements.html) 列表的过程是相似的。
2222

23-
### Rendering Multiple Components {#rendering-multiple-components}
23+
### 渲染多个组件 {#rendering-multiple-components}
2424

25-
You can build collections of elements and [include them in JSX](/docs/introducing-jsx.html#embedding-expressions-in-jsx) using curly braces `{}`.
25+
你可以通过使用 `{}` 在 JSX 内构建一个[元素集合](/docs/introducing-jsx.html#embedding-expressions-in-jsx)
2626

27-
Below, we loop through the `numbers` array using the JavaScript [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) function. We return a `<li>` element for each item. Finally, we assign the resulting array of elements to `listItems`:
27+
下面,我们使用 Javascript 中的 [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) 方法来遍历 `numbers` 数组。将数组中的每个元素变成 `<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-
We include the entire `listItems` array inside a `<ul>` element, and [render it to the 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(
@@ -42,15 +42,15 @@ ReactDOM.render(
4242
);
4343
```
4444

45-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/GjPyQr?editors=0011)
45+
[CodePen 上尝试](https://codepen.io/gaearon/pen/GjPyQr?editors=0011)
4646

47-
This code displays a bullet list of numbers between 1 and 5.
47+
这段代码生成了一个 1 到 5 的项目符号列表。
4848

49-
### Basic List Component {#basic-list-component}
49+
### 基础列表组件 {#basic-list-component}
5050

51-
Usually you would render lists inside a [component](/docs/components-and-props.html).
51+
通常你需要在一个[组件](/docs/components-and-props.html) 中渲染列表。
5252

53-
We can refactor the previous example into a component that accepts an array of `numbers` and outputs a list of elements.
53+
我们可以把前面的例子重构成一个组件,这个组件接收 `numbers` 数组作为参数并输出一个元素列表。
5454

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

73-
When you run this code, you'll be given a warning that a key should be provided for list items. A "key" is a special string attribute you need to include when creating lists of elements. We'll discuss why it's important in the next section.
73+
当我们运行这段代码,将会看到一个警告 `a key should be provided for list items` ,意思是当你创建一个元素时,必须包括一个特殊的 `key` 属性。我们将在下一节讨论这是为什么。
7474

75-
Let's assign a `key` to our list items inside `numbers.map()` and fix the missing key issue.
75+
让我们来给每个列表元素分配一个 `key` 属性来解决上面的那个警告:
7676

7777
```javascript{4}
7878
function NumberList(props) {
@@ -94,11 +94,11 @@ ReactDOM.render(
9494
);
9595
```
9696

97-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/jrXYRR?editors=0011)
97+
[CodePen 上尝试](https://codepen.io/gaearon/pen/jrXYRR?editors=0011)
9898

9999
## Keys {#keys}
100100

101-
Keys help React identify which items have changed, are added, or are removed. Keys should be given to the elements inside the array to give the elements a stable identity:
101+
Keys 帮助 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-
The best way to pick a key is to use a string that uniquely identifies a list item among its siblings. Most often you would use IDs from your data as keys:
112+
一个元素的 key 最好是这个元素在列表中拥有的一个独一无二的字符串。通常,我们使用来自数据 id 来作为元素的 key:
113113

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

122-
When you don't have stable IDs for rendered items, you may use the item index as a key as a last resort:
122+
当元素没有确定 id 的时候,万不得已你可以使用元素索引 index 作为 key
123123

124124
```js{2,3}
125125
const todoItems = todos.map((todo, index) =>
@@ -130,23 +130,23 @@ const todoItems = todos.map((todo, index) =>
130130
);
131131
```
132132

133-
We don't recommend using indexes for keys if the order of items may change. This can negatively impact performance and may cause issues with component state. Check out Robin Pokorny's article for an [in-depth explanation on the negative impacts of using an index as a key](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318). If you choose not to assign an explicit key to list items then React will default to using indexes as keys.
133+
如果列表项目的顺序可能会变化,我们不建议使用索引来用作键值,因为这样做会导致性能变差,还可能引起组件状态的问题。可以看看 Robin Pokorny[深度解析使用索引作为 key 的负面影响](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318) 这一篇文章。如果你选择不指定显式的键值,那么 React 将默认使用索引用作为列表项目的键值。
134134

135-
Here is an [in-depth explanation about why keys are necessary](/docs/reconciliation.html#recursing-on-children) if you're interested in learning more.
135+
要是你有兴趣了解更多的话,这里有一篇文章[深入解析为什么 keys 是必须的](/docs/reconciliation.html#recursing-on-children)可以参考。
136136

137-
### Extracting Components with Keys {#extracting-components-with-keys}
137+
### Keys 提取组件 {#extracting-components-with-keys}
138138

139-
Keys only make sense in the context of the surrounding array.
139+
元素的 Key 只有放在就近的数组上下文中才有意义。
140140

141-
For example, if you [extract](/docs/components-and-props.html#extracting-components) a `ListItem` component, you should keep the key on the `<ListItem />` elements in the array rather than on the `<li>` element in the `ListItem` itself.
141+
比方说,如果你[提取](/docs/components-and-props.html#extracting-components) 出一个 `ListItem` 组件,你应该把 key 保留在数组中的这个 `<ListItem />` 元素上,而不是放在 `ListItem` 组件中的 `<li>` 元素上。
142142

143-
**Example: Incorrect Key Usage**
143+
** 例子:不正确的使用键的方式 **
144144

145145
```javascript{4,5,14,15}
146146
function ListItem(props) {
147147
const value = props.value;
148148
return (
149-
// Wrong! There is no need to specify the key here:
149+
// 错误!你不需要在这里指定 key:
150150
<li key={value.toString()}>
151151
{value}
152152
</li>
@@ -156,7 +156,7 @@ function ListItem(props) {
156156
function NumberList(props) {
157157
const numbers = props.numbers;
158158
const listItems = numbers.map((number) =>
159-
// Wrong! The key should have been specified here:
159+
// 错误!元素的 key 应该在这里指定:
160160
<ListItem value={number} />
161161
);
162162
return (
@@ -173,18 +173,18 @@ ReactDOM.render(
173173
);
174174
```
175175

176-
**Example: Correct Key Usage**
176+
** 例子:正确的使用键的方式 **
177177

178178
```javascript{2,3,9,10}
179179
function ListItem(props) {
180-
// Correct! There is no need to specify the key here:
180+
// 正确!这里不需要指定 key:
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+
// 正确!key 应该在数组的上下文中被指定
188188
<ListItem key={number.toString()}
189189
value={number} />
190190
);
@@ -202,13 +202,13 @@ ReactDOM.render(
202202
);
203203
```
204204

205-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/ZXeOGM?editors=0010)
205+
[CodePen 上尝试](https://codepen.io/gaearon/pen/ZXeOGM?editors=0010)
206206

207-
A good rule of thumb is that elements inside the `map()` call need keys.
207+
一个好的经验法则是:在 `map()` 方法中的元素需要设置 keys 属性。
208208

209-
### Keys Must Only Be Unique Among Siblings {#keys-must-only-be-unique-among-siblings}
209+
### 键(Key)只是在兄弟节点之间必须唯一 {#keys-must-only-be-unique-among-siblings}
210210

211-
Keys used within arrays should be unique among their siblings. However they don't need to be globally unique. We can use the same keys when we produce two different arrays:
211+
数组元素中使用的 key 在其兄弟节点之间应该是独一无二的。然而,它们不需要是全局唯一的。当我们生成两个不同的数组时,我们可以使用相同的键:
212212

213213
```js{2,5,11,12,19,21}
214214
function Blog(props) {
@@ -246,9 +246,9 @@ ReactDOM.render(
246246
);
247247
```
248248

249-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/NRZYGN?editors=0010)
249+
[CodePen 上尝试](https://codepen.io/gaearon/pen/NRZYGN?editors=0010)
250250

251-
Keys serve as a hint to React but they don't get passed to your components. If you need the same value in your component, pass it explicitly as a prop with a different name:
251+
key 会传递信息给 React ,但不会传递给你的组件。如果你的组件中需要使用 `key` 属性的值,请用其他属性名显式传递这个值:
252252

253253
```js{3,4}
254254
const content = posts.map((post) =>
@@ -259,11 +259,11 @@ const content = posts.map((post) =>
259259
);
260260
```
261261

262-
With the example above, the `Post` component can read `props.id`, but not `props.key`.
262+
上面例子中,`Post` 组件可以读出 `props.id`,但是不能读出 `props.key`
263263

264-
### Embedding map() in JSX {#embedding-map-in-jsx}
264+
### 在 JSX 中嵌入 map() {#embedding-map-in-jsx}
265265

266-
In the examples above we declared a separate `listItems` variable and included it in JSX:
266+
在上面的例子中,我们声明了一个单独的 `listItems` 变量并将其包含在 JSX 中:
267267

268268
```js{3-6}
269269
function NumberList(props) {
@@ -280,7 +280,7 @@ function NumberList(props) {
280280
}
281281
```
282282

283-
JSX allows [embedding any expression](/docs/introducing-jsx.html#embedding-expressions-in-jsx) in curly braces so we could inline the `map()` result:
283+
JSX 允许在大括号中[嵌入任何表达式](/docs/introducing-jsx.html#embedding-expressions-in-jsx),所以我们可以内联 `map()` 返回的结果:
284284

285285
```js{5-8}
286286
function NumberList(props) {
@@ -296,6 +296,6 @@ function NumberList(props) {
296296
}
297297
```
298298

299-
[**Try it on CodePen**](https://codepen.io/gaearon/pen/BLvYrB?editors=0010)
299+
[CodePen 上尝试](https://codepen.io/gaearon/pen/BLvYrB?editors=0010)
300300

301-
Sometimes this results in clearer code, but this style can also be abused. Like in JavaScript, it is up to you to decide whether it is worth extracting a variable for readability. Keep in mind that if the `map()` body is too nested, it might be a good time to [extract a component](/docs/components-and-props.html#extracting-components).
301+
这么做有时可以使你的代码更清晰,但有时这种风格也会被滥用。就像在 JavaScript 中一样,何时需要为了可读性提取出一个变量,这完全取决于你。但请记住,如果一个 `map()` 嵌套了太多层级,那可能就是你[提取组件](/docs/components-and-props.html#extracting-components)的一个好时机。

0 commit comments

Comments
 (0)