为什么 forEach 和 map 在 jsx 中表现不同?
Why forEach and map behave differently in jsx?
这是我第一次剪辑
export default class Form extends Component {
renderResult(result) {
return (
<span key={result.id}>{result.id}</span>
)
}
render() {
const { entity, results } = this.props.response;
return (
<div key="result" className="row">
{results.map(
(result) => this.renderResult(result)
)}
</div>
);
}
如我所料。在我的输出中,我可以看到生成了一些 <span/>
。
由于我需要根据 result
在数组中的顺序显示不同的结果,我想将一个索引变量传递给渲染函数。我试着切换到 forEach
export default class Form extends Component {
renderResult(idx, result) {
// if idx then do this else ...
return (
<span key={result.id}>{result.id}</span>
)
}
render() {
const { entity, results } = this.props.response;
return (
<div key="result" className="row">
{results.forEach(
(response, idx) => this.renderResult(idx, response)
)}
</div>
);
}
然而,在此版本中,它无法输出任何 span
元素。
为什么不同?
.forEach
有一个 return 类型的 undefined
。由回调编辑的值 return 被简单地丢弃。
.map
有一个 return 类型的 Array
。由回调 return 编辑的值被收集到一个数组中。
如果 .forEach
是在 .forEach
将索引作为参数但 .map
不作为参数的错误假设下映射的,那么您似乎在尝试使用它,这是不正确的。两者都采用 function(item, index, items){
.
形式的回调
这是我第一次剪辑
export default class Form extends Component {
renderResult(result) {
return (
<span key={result.id}>{result.id}</span>
)
}
render() {
const { entity, results } = this.props.response;
return (
<div key="result" className="row">
{results.map(
(result) => this.renderResult(result)
)}
</div>
);
}
如我所料。在我的输出中,我可以看到生成了一些 <span/>
。
由于我需要根据 result
在数组中的顺序显示不同的结果,我想将一个索引变量传递给渲染函数。我试着切换到 forEach
export default class Form extends Component {
renderResult(idx, result) {
// if idx then do this else ...
return (
<span key={result.id}>{result.id}</span>
)
}
render() {
const { entity, results } = this.props.response;
return (
<div key="result" className="row">
{results.forEach(
(response, idx) => this.renderResult(idx, response)
)}
</div>
);
}
然而,在此版本中,它无法输出任何 span
元素。
为什么不同?
.forEach
有一个 return 类型的 undefined
。由回调编辑的值 return 被简单地丢弃。
.map
有一个 return 类型的 Array
。由回调 return 编辑的值被收集到一个数组中。
如果 .forEach
是在 .forEach
将索引作为参数但 .map
不作为参数的错误假设下映射的,那么您似乎在尝试使用它,这是不正确的。两者都采用 function(item, index, items){
.