我试图从一个集成在其父级中的子类调用一个事件处理程序,但是处理程序没有被调用,我也没有收到任何错误消息。
var Home = React.createClass({
handleClick: function(tableRowId, e) {
console.log("##Clicked##", tableRowId);
}
render : function () {
var tableRows = Data.map(function (tableRow) {
if (SelLines[tableRow.ID]) {
return (
<Tr>
// ...
<Td className = "cellSelected" column = "ACTION">
// ## This doesnt call the handler
<a onClick = {this.handleClick.bind(this, tableRow.ID)}> {tableRow.ACTION} </ a> < / Td >
< / Tr > )
} else {
return (
//...
};
});
return (
< div >
< div >
// ## This does work and call the handler
<a onClick={this.handleClick.bind(this, 1234)}> Test </a>
< Table className = "table" id = "table" >
{tableRows}
< / Table >
< / div >
< / div > );
}
});
答案 0 :(得分:3)
在地图功能中,this
不再引用您的组件,因此您的处理程序失败。
您有两种解决方案:
Data.map((tableRow) => {
。但是,这需要您通过babelify编译代码以使其与当前浏览器兼容。var c = this
,然后在函数中使用c
代替this
。这样你就可以确定你实际上正在使用该组件。答案 1 :(得分:0)
问题是this
中的Data.map
没有引用React组件。您还需要将this
的React组件绑定到Data.map
函数的回调。
更新:因为很难执行绑定2级。这是获取React组件的this
的简单方法。
render : function(){
var that = this;
...Data.map(function(){ that.handle...})
....
}