以下反应代码不起作用。'选择'函数总是用10而不是赋值来调用。
select( x ) {
alert( x ); // Always alerts 10.
}
render() {
var AllData = [];
for( var i = 0; i<10 ;i++ ) {
AllData.push(
<div key={i} onClick={() => this.select(i)} >{i}</div>
);
}
return (
<div>
{AllData}
</div>
);
}
如何正确传递for循环中的动态值?
答案 0 :(得分:2)
由于您使用的是ES2015 箭头功能表示法,我建议您只需将var
替换为let
进行循环变量初始化。这样你就拥有了一个真正的块范围,否则你必须处理功能范围,这是你麻烦的根源。
for( let i = 0; i<10 ;i++ ) {
AllData.push(
<div key={i} onClick={() => this.select(i)} >{i}</div>
);
}
答案 1 :(得分:2)
您必须为i
变量定义新范围,因此它不会对它们使用相同的范围。实现它的一种方法是使用立即函数:
select( x ) {
alert( x );
}
render() {
var AllData = [];
for( var i = 0; i<10 ;i++ ) {
((i) => {
AllData.push(
<div key={i} onClick={() => this.select(i)} >{i}</div>
);
})(i);
}
return (
<div>
{AllData}
</div>
);
}