【发布时间】:2019-02-10 02:24:00
【问题描述】:
我有一个包含对象的数组。我正在创建此数组的映射以使用 span 组件呈现名称。
let data = [{"id": "01", "name": "Hi"}, {"id": "02", "name": "Hello"}];
我一直在使用以下两个不同的功能来迭代该对象数组,并使用 map 来呈现 JSX 元素。
功能1:
import React, { Component } from 'react';
class App extends Component {
render() {
let data = [{"id": "01", "name": "Hi"}, {"id": "02", "name": "Hello"}];
const items = data.map((key, i) => {
return <span key={key.id}>{key.name}</span>;
});
return (
<div>
{items}
</div>
);
}
}
export default App;
功能2:
import React, { Component } from 'react';
class App extends Component {
render() {
let data = [{"id": "01", "name": "Hi"}, {"id": "02", "name": "Hello"}];
let rows = [];
data.map((key, i) => {
rows.push(<span key={key.id}>{key.name}</span>);
});
return (
<div>
{rows}
</div>
);
}
}
export default App;
我知道上述两种使用map 和渲染JSX 元素的不同方式。除了这两种之外,还有其他方法可以做到这一点吗?如果有,推荐哪个?
【问题讨论】:
-
"Functionality2" 在调用
.map时创建一个从未使用过的数组。切换到data.forEach,这样就不会创建不必要的数组了。 -
但这仅在分配给参考权时?比如 const array = data.map(如果我错了请纠正我
-
不,无论您是否将其分配给变量,都会创建数组。在上面的代码中,创建了 Array,然后立即有资格进行垃圾收集,因为没有引用指向它。如果切换到
.forEach,则不会创建额外的Array。 -
好的,明白了。谢谢。当我们在迭代中渲染 jsx 元素时,您还可以帮助我使用其他渲染方式吗?除了我提到的和下面提到的其他内容
-
对您的两种方法以及一些变体进行快速的JsPerf 比较。功能 1 是您的最佳选择。
标签: javascript reactjs jsx array.prototype.map