我在子组件中传递状态作为道具,但是孩子正在将之前的道具更新为其状态。
例如:
我正在传递 state = a ,然后状态更新为 state = b 。孩子会将其更新为 a 。
父:
<div className="custom-container">
{console.log("Passing Tab:"+this.state.selectedTab)}
<Companyprofilehead data={companyData} selfprofile={false} tab={this.state.selectedTab}/>
</div>
在上面的代码中,console.log将提供输出:
Passing Tab: b
在Child的componentWillMount()中:
componentWillMount(){
var currentTab = this.props.tab;
console.log("CURRENT TAB:"+currentTab);
this.setState({
currentTab: currentTab
})
}
孩子的 componentWillReceiveProps():
componentWillReceiveProps(newProps) {
var currentTab = this.props.tab;
console.log("CURRENT TAB IN WILL PROPS:"+currentTab);
this.setState({
currentTab: currentTab
})
}
以上代码将输出显示为:
CURRENT TAB IN WILL PROPS: a
如果在父母的Passing Tab: a
中,那么
在孩子的CURRENT TAB IN WILL PROPS: b
反之亦然,这里可能出现什么问题?
答案 0 :(得分:4)
内部componentWIllRecieveProps
传递newProps.tab
instead of this.props.tab
componentWillReceiveProps(newProps) {
var currentTab = newProps.tab;
}
答案 1 :(得分:1)
新道具将在变量newProps中。因此,您必须使用newProps.tab
来获取传入的道具。
componentWillReceiveProps(newProps) {
const currentTab = newProps.tab;
console.log("CURRENT TAB IN WILL PROPS:"+currentTab);
this.setState({
currentTab: currentTab
})
}
在安装的组件之前调用componentWillReceiveProps() 收到新的道具。如果您需要更新状态以响应 prop更改(例如,重置它),您可以比较this.props 和nextProps并使用this.setState()执行状态转换 这种方法。
https://reactjs.org/docs/react-component.html#componentwillreceiveprops