父组件Header调用子组件Login,传给子组件一个自己的this.state.A,
当子组件接受后,写入自己的state{A:this.props.A},
当父组件的this.state.A改变时,子组件该如何更新自己的state。
父组件Header
class Header extends React.Component {
constructor(props) {
super(props);
this.state = {
loginShow: false
}
}
render() {
return(
<div>
<Button onClick={this.loginHandler.bind(this) /}
<Login loginShow={this.state.loginShow}></Login>
</div>
)
}
loginHandler() {
this.setState({
loginShow: true,
})
console.log("header: " + this.state.loginShow)
}
}
子组件Login
class Login extends React.Component {
constructor(props) {
super(props);
this.state = {
loginShow: this.props.loginShow
}
}
render() {
console.log(this.state.loginShow)
return(
<div>
{/*登录弹窗*/}
{
this.state.loginShow
?
<div className="pop-wrapper pop-login">
<div className="pop-top">
<img className="pop-banner" src="http://oxwkidmsg.bkt.clouddn.com/pop-sign.png" alt="" />
<i className="btn-close iconfont icon-close" onClick={this.closeHandler.bind(this)}/>
</div>
<div className="sign-form">
<input type="text" placeholder="用户名/手机号" />
<input type="text" placeholder="密码" />
</div>
<div className="btn-confirm">
<button>登 陆</button>
<p><a id="login-sign" href="javascript:;">立即注册</a><a id="login-forget" href="javascript:;">忘记密码?</a></p>
</div>
</div>
:''
}
</div>
)
}
closeHandler() {
this.setState({
maskShow: false,
loginShow: false
})
console.log(this.state.maskShow)
}
}
你这个想法也不是不可以,无非就是在componentWillReceiveProps的时候setState,不过不推荐