我有2个文件:
grid-body.jsx(GridBody)和grid-row.jsx(GridRow)
在GridBody中,我声明了一个函数showAlert,我传递给每个GridRow:
var GridBody = React.createClass({
showAlert: function(msg) {
alert(msg);
},
render: function() {
var rows = this.props.rows.map(function(li) {
return (
<GridRow showAlert={this.showAlert} />
);
});
return (
<div>
{rows}
</div>
);
}
});
在GridRow中:
var GridRow = React.createClass({
toggle: function() {
this.props.showAlert('HEY'); // -----> ERROR - not a function
},
render: function() {
<div>
<a href="#" onClick={this.toggle} />
</div>
}
});
我试图从父母那里调用showAlert,根据我见过的例子,这是怎么做的,但是我无法让它发挥作用。
答案 0 :(得分:2)
您在this
内使用了GridView.render
的错误值。将其明确传递给Array.map()
(请参阅docs了解如何执行此操作)或将this
分配给render()
顶部的某个新变量,并将其引用。
Here是一个非常非常好的评论,为什么会发生这种情况,以及其他一些替代解决方法,如果以上两种方法都不适合你。
答案 1 :(得分:0)
在GridBody的render方法中传递给map的函数的上下文是window而不是组件。您可以绑定interatee以获得所需的行为:
render: function() {
var rows = this.props.rows.map(function(li) {
return (
<GridRow showAlert={this.showAlert} />
);
}.bind(this));
return (
<div>
{rows}
</div>
);
}