【发布时间】:2017-12-02 07:51:31
【问题描述】:
我有一个反应组件,它使用单个 OnClick 呈现列表项。
为了找出点击了哪个项目,处理程序接受一个参数。处理程序确实被调用 - 但无论单击哪个项目 - 控制台始终记录 item3(就像单击 item3 一样)。我在这里做错了什么?
class Item {
constructor(props) {
super(props);
this.onItemClickHandler = this.onItemClickHandler.bind(this)
}
onItemClickHandler (itemName) {
console.log("Clicked " + itemName)
}
render() {
this.items = ["item1", "item2", "item3"]
var lis = []
for (var liName in this.items) {
var liName2 = this.items[liName]
console.log("Adding " + this.items[liName])
lis.push(<li className="item-ListItem" key={this.items[liName]} onClick={() => this.onItemClickHandler(this.items[liName])}><span><a href="#">{this.items[liName]}</a></span></li>)
}
return (
<div className="item">
<label className="item-Header"><u>items</u></label>
<ul className="item-List">
{lis}
</ul>
</div>
);
}
这一行:
onClick={() => this.onItemClickHandler(this.items[liName])}>
似乎是正确的。
【问题讨论】:
-
你在那个 for 循环中使用了
var。请改用let关键字。 var 的范围问题。请参阅:github.com/getify/You-Dont-Know-JS/blob/master/… -
使用 let 解决了这个问题,是我当前代码中最小的变化。谢谢!
标签: javascript reactjs