我正在渲染'行'通过在包含一系列职位列表的道具上调用li
而创建的map
元素所代表的职位列表。
每个li
都有一个onClick
处理程序,在其中我需要访问与所点击的行相关联的id
,以便显示作业列表的详细信息页面{{1 }}。请注意,id
会将作业列表的map
值添加为id
元素的key
属性。
li
函数看起来像这样:
map
var jobListRow = this.props.joblists.map(function(jobrowobj) {
return (
<li key={jobrowobj.id} onClick={this.handleClick}>
<div>bla bla</div>
<span>bla bla</span>
</li>
);
});
处理程序如下所示:
onClick
在处理程序中,我希望使用点击的handleClick: function(event) {
console.log(event.target);
}
的{{1}}来获取target
的{{1}}属性的值,但是li
返回似乎每次都不同,恰好是key
的变化子元素。如何访问被点击的li
的{{1}}?或者,换句话说:我如何访问被点击的工作列表的target
?
答案 0 :(得分:1)
这应该有效,你需要有正确的上下文绑定:
var jobListRow = this.props.joblists.map(function(jobrowobj, i){
return(
<li key={jobrowobj.id} onClick={this.handleClick.bind(this,i)}>
<div>bla bla</div>
<span>bla bla</span>
</li>
)
});
handleClick: function(i) {
console.log('You clicked: ' + this.props.joblists[i]);
}
在此处找到此实施:https://facebook.github.io/react/tips/communicate-between-components.html
它似乎符合您的需求。希望它有所帮助
答案 1 :(得分:1)
map函数有一个选项可以将'this'作为第二个参数传递。我是这样做的。
var vm = this;
var jobListRow = this.props.joblists.map(function(jobrowobj){
return(
<li key={jobrowobj.id} id={jobrowobj.id} onClick={this.handleClick}>
<div>bla bla</div>
<span>bla bla</span>
</li>
)
}, vm);
handleClick: function(event) {
console.log('You clicked: ' + event.target.id);
}