不能使用React从子组件调用父组件中的函数
Can't call function in parent component from child component using React
我有两个文件:
grid-body。jsx (GridBody)和gridrow。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>
);
}
});
var GridRow = React.createClass({
toggle: function() {
this.props.showAlert('HEY'); // -----> ERROR - not a function
},
render: function() {
<div>
<a href="#" onClick={this.toggle} />
</div>
}
});
我正在尝试从parent调用showAlert,根据我所看到的例子,这就是如何做到这一点,但我不能使它工作
您在GridView.render
中使用了错误的this
值。要么将它显式地传递给Array.map()
(请参阅文档了解如何做到这一点),要么将this
分配给render()
最顶部的一些新变量并引用它。
这里有一个非常非常好的SO评论,解释了为什么会发生这种情况,以及如果以上两种方法都不适合你的话,还有一些其他的解决方法。
在GridBody的渲染方法中传递给map的函数的上下文是窗口而不是组件。您可以绑定交互对象以获得您想要的行为:
render: function() {
var rows = this.props.rows.map(function(li) {
return (
<GridRow showAlert={this.showAlert} />
);
}.bind(this));
return (
<div>
{rows}
</div>
);
}
相关文章:
- 从 HTML 组件调用 Javascript
- 反应组件调用了两次(AJAX调用异步)
- Vue.js 从另一个组件调用方法
- 从反应组件调用外部Javascript函数
- 如何在React Native中使用Navigator对正在转换为的组件调用方法
- 如何包含多个组件,然后可能从一个组件调用另一个组件
- 当子组件有嵌套的多个父组件时,从子组件调用超父函数
- 在reactjs中,从父组件调用并传递参数给子组件的函数
- React:从非所有者父组件调用函数
- 从Ember 2.0组件调用控制器动作
- 从另一个组件调用React VideoJS组件的方法
- 不能使用React从子组件调用父组件中的函数
- 如果不在主代码流中,ActiveX组件调用的回调函数不会触发
- 如何从不同的组件调用函数
- JavaScript,只在需要时才加载组件/调用方法
- Angular2从另一个组件调用函数
- Knockoutjs:从子组件调用父组件的函数
- 如何从子组件调用父组件中的方法
- 为什么用jQuery组件调用函数会重新加载xhtml页面
- 如何在 React 中从另一个组件调用组件的方法