componentWillReceiveProps在状态改变时被调用
ReactJS: componentWillReceiveProps is called on state change?
我试图解决一个场景,其中父将包括一个模块,当一个按钮被点击父,模块将出现。
现在,在模块中将有一个关闭按钮,点击它将隐藏模块。下次单击父按钮时,模块应该再次出现,依此类推。
目前代码:
var Parent = React.createClass({
getInitialState(){
return{
showModule: false
};
},
render(){
return(
<div className="parent" onClick={this._showModule}>
Click me to show module
<Module show={this.state.showModule}/>
</div>
);
},
_showModule(){
this.setState({
showModule: true
});
}
});
var Module = React.createClass({
getInitialState(){
return{
show: this.props.show
};
},
componentWillReceiveProps(nextProps){
console.log('componentWillReceiveProps is called');
this.setState({
show: nextProps.show
});
},
render(){
return(
(this.state.show?
<div className="module" onClick={this._hide}>
Click me and I will disappear myself
</div> : null
)
);
},
_hide(){
this.setState({
show: false
});
}
});
这里的问题是,每当我调用Module中的hide函数(它通过改变状态来隐藏自己)。show to false), componentWillReceiveProps被调用。
不应该只在Parent传递新props时调用吗?子模块中的状态变化如何以及为什么会调用componentWillReceiveProps?
JsBin http://jsbin.com/cunuci/edit?js、控制台、输出
当你点击" click me and I will disappear myself"你实际上点击了Parent并调用Parent。_showModule处理程序。把
<div className="parent" onClick={this._showModule}>
Click me to show module
<Module show={this.state.showModule}/>
</div>
<div className="parent">
<p onClick={this._showModule}>Click me to show module</p>
<Module show={this.state.showModule}/>
</div>
http://jsbin.com/naloxafile/1/edit?js、控制台、输出
相关文章:
- Javascript(不是jquery)按钮点击,函数改变按钮类调用函数
- 在随后调用reloadData()时,角度数据表的有效载荷格式不会改变
- 为什么将变量的console.log()移动到第二个AJAX调用中会改变输出?
- 当改变一个类时,超过了最大调用栈大小
- 当单选按钮客户端检查改变时,使用JQuery调用函数
- 为什么我的画布对象在setInterval()被调用后不改变颜色?
- 如何调用函数一旦dom元素的样式改变Javascript/jquery
- AngularJS -当URL改变时不调用工厂
- Jquery在多个元素改变前调用函数
- 用jquery改变调用javascript函数变量
- 只有当变量(布尔值)改变时才调用javascript/jquery函数
- 指令在字段上调用setValidity(false),但是字段的有效性永远不会根据视图而改变
- 数据源查询回调问题(调用顺序,改变全局变量的能力)
- jQuery改变事件处理程序不调用引导单选按钮
- 在angularJS中调用ajax后改变视图
- 值在ajax调用之间不会改变
- Javascript调用改变类型
- Textarea在ajax调用中不会改变
- 改变HTML图像,函数似乎没有被调用
- js服务调用改变请求类型