@@ -8,23 +8,23 @@ next: forms.html
8
8
9
9
首先,让我们看下在 Javascript 中如何转化列表。
10
10
11
- 如下代码,我们使用 [ ` map() ` ] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map ) 函数让数组中的每一项变双倍,我们得到了一个新的列表` doubled ` :
11
+ 如下代码,我们使用 [ ` map() ` ] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map ) 函数让数组中的每一项变双倍,我们得到了一个新的列表 ` doubled ` :
12
12
13
13
``` javascript{2}
14
14
const numbers = [1, 2, 3, 4, 5];
15
15
const doubled = numbers.map((number) => number * 2);
16
16
console.log(doubled);
17
17
```
18
18
19
- 代码打印出` [2, 4, 6, 8, 10] ` 。
19
+ 代码打印出 ` [2, 4, 6, 8, 10] ` 。
20
20
21
21
在 React 中,把数组转化为列表[ 元素] ( /docs/rendering-elements.html ) 的过程是相似的。
22
22
23
23
### 渲染多个组件
24
24
25
- 你可以通过使用` {} ` 在 JSX 内构建一个[ 元素集合] ( /docs/introducing-jsx.html#embedding-expressions-in-jsx ) 。
25
+ 你可以通过使用 ` {} ` 在 JSX 内构建一个[ 元素集合] ( /docs/introducing-jsx.html#embedding-expressions-in-jsx ) 。
26
26
27
- 下面,我们使用 Javascript 中的 [ ` map() ` ] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map ) 方法遍历` numbers ` 数组。对数组中的每个元素返回` <li> ` 标签,最后我们得到一个数组` listItems ` :
27
+ 下面,我们使用 Javascript 中的 [ ` map() ` ] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map ) 方法遍历 ` numbers ` 数组。对数组中的每个元素返回 ` <li> ` 标签,最后我们得到一个数组 ` listItems ` :
28
28
29
29
``` javascript{2-4}
30
30
const numbers = [1, 2, 3, 4, 5];
@@ -33,7 +33,7 @@ const listItems = numbers.map((number) =>
33
33
);
34
34
```
35
35
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 ) :
37
37
38
38
``` javascript{2}
39
39
ReactDOM.render(
@@ -130,17 +130,17 @@ const todoItems = todos.map((todo, index) =>
130
130
);
131
131
```
132
132
133
- 如果列表项目的顺序可能会变化,我们不建议使用索引来用作键值,因为这样做会导致性能的负面影响,还可能引起组件状态问题。如果你想要了解更多,请点击[ 深度解析 key 的必要性] ( /docs/reconciliation.html#递归子节点 ) 。如果你选择不指定显式的键值,那么 React 将默认使用索引用作为列表项目的键值。
133
+ 如果列表项目的顺序可能会变化,我们不建议使用索引来用作键值,因为这样做会导致性能的负面影响,还可能引起组件状态问题。如果你想要了解更多,请点击[ 深度解析 key 的必要性] (/docs/reconciliation.html# 递归子节点)。如果你选择不指定显式的键值,那么 React 将默认使用索引用作为列表项目的键值。
134
134
135
135
要是你有兴趣了解更多的话,这里有一篇文章 [ in-depth explanation about why keys are necessary] ( https://reactjs.org/docs/reconciliation.html#recursing-on-children ) 可以参考。
136
136
137
137
### 用 Keys 提取组件
138
138
139
139
元素的 key 只有放在其周围数组的上下文中才有意义。
140
140
141
- 比方说,如果你[ 抽取] ( /docs/components-and-props.html#extracting-components ) 出一个` ListItem ` 组件,你应该把 key 保存在数组中的这个` <ListItem /> ` 元素上,而不是放在` ListItem ` 组件中的` <li> ` 元素上。
141
+ 比方说,如果你[ 抽取] ( /docs/components-and-props.html#extracting-components ) 出一个 ` ListItem ` 组件,你应该把 key 保存在数组中的这个 ` <ListItem /> ` 元素上,而不是放在 ` ListItem ` 组件中的 ` <li> ` 元素上。
142
142
143
- ** 示范:不正确的使用键的方式**
143
+ ** 示范:不正确的使用键的方式 **
144
144
145
145
``` javascript{4,5,14,15}
146
146
function ListItem(props) {
@@ -174,7 +174,7 @@ ReactDOM.render(
174
174
```
175
175
176
176
177
- ** 示范:正确的使用键的方式**
177
+ ** 示范:正确的使用键的方式 **
178
178
179
179
``` javascript{2,3,9,10}
180
180
function ListItem(props) {
@@ -205,7 +205,7 @@ ReactDOM.render(
205
205
206
206
[ 在 CodePen 上试试。] ( https://codepen.io/rthor/pen/QKzJKG?editors=0010 )
207
207
208
- 一个好的经验法则是:在` map() ` 方法中的元素时需要设置键属性。
208
+ 一个好的经验法则是:在 ` map() ` 方法中的元素时需要设置键属性。
209
209
210
210
### 键(key)只是在兄弟节点之间必须唯一
211
211
@@ -249,7 +249,7 @@ ReactDOM.render(
249
249
250
250
[ 在 CodePen 上试试。] ( https://codepen.io/gaearon/pen/NRZYGN?editors=0010 )
251
251
252
- key 会传递信息给 React ,但不会传递给你的组件。如果你的组件中需要使用` key ` 属性的值,请用其他属性名显式传递这个值:
252
+ key 会传递信息给 React ,但不会传递给你的组件。如果你的组件中需要使用 ` key ` 属性的值,请用其他属性名显式传递这个值:
253
253
254
254
``` js{3,4}
255
255
const content = posts.map((post) =>
@@ -260,11 +260,11 @@ const content = posts.map((post) =>
260
260
);
261
261
```
262
262
263
- 上面例子中,` Post ` 组件可以读出` props.id ` ,但是不能读出` props.key ` 。
263
+ 上面例子中,` Post ` 组件可以读出 ` props.id ` ,但是不能读出 ` props.key ` 。
264
264
265
265
### 在 JSX 中嵌入 map()
266
266
267
- 在上面的例子中,我们声明了一个单独的` listItems ` 变量并将其包含在 JSX 中:
267
+ 在上面的例子中,我们声明了一个单独的 ` listItems ` 变量并将其包含在 JSX 中:
268
268
269
269
``` js{3-6}
270
270
function NumberList(props) {
@@ -281,7 +281,7 @@ function NumberList(props) {
281
281
}
282
282
```
283
283
284
- JSX 允许在大括号中[ 嵌入任何表达式] ( /docs/introducing-jsx.html#embedding-expressions-in-jsx ) ,所以我们可以在` map() ` 中这样使用:
284
+ JSX 允许在大括号中[ 嵌入任何表达式] ( /docs/introducing-jsx.html#embedding-expressions-in-jsx ) ,所以我们可以在 ` map() ` 中这样使用:
285
285
286
286
``` js{5-8}
287
287
function NumberList(props) {
@@ -299,4 +299,4 @@ function NumberList(props) {
299
299
300
300
[ 在 CodePen 上试试。] ( https://codepen.io/gaearon/pen/BLvYrB?editors=0010 )
301
301
302
- 这么做有时可以使你的代码更清晰,但有时这种风格也会被滥用。就像在 JavaScript 中一样,何时需要为了可读性提取出一个变量,这完全取决于你。但请记住,如果一个` map() ` 嵌套了太多层级,那可能就是你[ 提取出组件] ( /docs/components-and-props.html#提取组件 ) 的一个好时机。
302
+ 这么做有时可以使你的代码更清晰,但有时这种风格也会被滥用。就像在 JavaScript 中一样,何时需要为了可读性提取出一个变量,这完全取决于你。但请记住,如果一个 ` map() ` 嵌套了太多层级,那可能就是你 [ 提取出组件] (/docs/components-and-props.html# 提取组件) 的一个好时机。
0 commit comments