如何在父组件中调用函数
how to call function in parent component
这个问题有一个 fiddle here我在一个 React.js 应用程序中有一个 FormControl 组件,我在其中呈现了几种不同类型的其他组件。例如,在下面的代码中,您可以看到我呈现了一个 CheckBoxWithLabel。你会注意到我传递了一个函数
onCheck={this.toggleCheckBox}
以便在 CheckBoxWithLabel 组件(代码未显示)中我可以使用 onChange 事件(反应中复选框的内置事件)调用它
onChange={this.props.onCheck} //this code's in the CheckBoxWithLabel
所以结果是当复选框被点击时,父组件中的 toggleCheckBox
函数被调用,但这只对下面显示的第一个 CheckBoxWithLabel
起作用,其他的(在第二个 return 函数中动态创建)无法检查,因此不会调用 toggleCheckBox 函数。
这是为什么?
如果我没有尝试在父级上调用函数,而是让这些组件响应 CheckBoxWithLabel 组件中的函数,那么它们可以正常工作。只有当我在父级中设置一个函数时,复选框才会停止工作并且不会调用 toggleCheckBox 函数。
toggleCheckBox: function(){
console.log('toggle');
}
render: function(){
return (
<div>
<CheckboxWithLabel labelOn="On" labelOff="Off" item='blah' onCheck={this.toggleCheckBox} />
<ul>
{
this.props.formElements.map(function(item) {
return <CheckboxWithLabel labelOn="On" labelOff="Off" item={item} onCheck={this.toggleCheckBox} />
})
}
</ul>
</div>
);
}
需要绑定 map 内部的函数,以便它可以使用 this
的正确实例来检索函数:
render: function(){
return (
<div>
<CheckboxWithLabel labelOn="On" labelOff="Off" item='blah' onCheck={this.toggleCheckBox} />
<ul>
{
this.props.formElements.map(function(item) {
return <CheckboxWithLabel labelOn="On" labelOff="Off" item={item} onCheck={this.toggleCheckBox} />
}.bind(this));
}
</ul>
</div>
);
}
这个问题有一个 fiddle here我在一个 React.js 应用程序中有一个 FormControl 组件,我在其中呈现了几种不同类型的其他组件。例如,在下面的代码中,您可以看到我呈现了一个 CheckBoxWithLabel。你会注意到我传递了一个函数
onCheck={this.toggleCheckBox}
以便在 CheckBoxWithLabel 组件(代码未显示)中我可以使用 onChange 事件(反应中复选框的内置事件)调用它
onChange={this.props.onCheck} //this code's in the CheckBoxWithLabel
所以结果是当复选框被点击时,父组件中的 toggleCheckBox
函数被调用,但这只对下面显示的第一个 CheckBoxWithLabel
起作用,其他的(在第二个 return 函数中动态创建)无法检查,因此不会调用 toggleCheckBox 函数。
这是为什么?
如果我没有尝试在父级上调用函数,而是让这些组件响应 CheckBoxWithLabel 组件中的函数,那么它们可以正常工作。只有当我在父级中设置一个函数时,复选框才会停止工作并且不会调用 toggleCheckBox 函数。
toggleCheckBox: function(){
console.log('toggle');
}
render: function(){
return (
<div>
<CheckboxWithLabel labelOn="On" labelOff="Off" item='blah' onCheck={this.toggleCheckBox} />
<ul>
{
this.props.formElements.map(function(item) {
return <CheckboxWithLabel labelOn="On" labelOff="Off" item={item} onCheck={this.toggleCheckBox} />
})
}
</ul>
</div>
);
}
需要绑定 map 内部的函数,以便它可以使用 this
的正确实例来检索函数:
render: function(){
return (
<div>
<CheckboxWithLabel labelOn="On" labelOff="Off" item='blah' onCheck={this.toggleCheckBox} />
<ul>
{
this.props.formElements.map(function(item) {
return <CheckboxWithLabel labelOn="On" labelOff="Off" item={item} onCheck={this.toggleCheckBox} />
}.bind(this));
}
</ul>
</div>
);
}