当我渲染页面时,我使用componentWillReceiveProps(nextProps)
访问道具。在初始加载时,道具进入页面,但是,如果我单击内部链接然后单击返回页面,则componentWillReceiveProps(nextProps)
似乎被跳过,因此道具不会加载。从我的阅读来看,这似乎是正确的,我只是不知道解决方案是什么。有什么帮助吗?
componentWillReceiveProps(nextProps) {
const profileCandidateCollection = nextProps.profileCandidate;
const profileCandidateCollectionId = profileCandidateCollection._id;
const summary = profileCandidateCollection && profileCandidateCollection.summary;
console.log("summary: ", summary);
this.setState({
summary: summary || '',
profileCandidateCollectionId: profileCandidateCollectionId || null
});
}
答案 0 :(得分:1)
componentWillRecieveProps是一种未安装的更新生命周期方法,它不会在初始渲染时调用,只有在道具更新时才会触发。
当您单击该组件将使用此循环呈现的后退按钮时:
constructor -> componentWillMount -> render
在那个循环中componentWillRecieve
将不会被调用,一旦组件被渲染并且任何更改发生在props值上,那么它将被调用。
根据DOC:
在安装的组件之前调用componentWillReceiveProps() 收到新道具。如果您需要更新状态以响应 prop更改(例如,重置它),您可以比较this.props 和nextProps并使用this.setState()执行状态转换 这种方法。
使用初始道具值在constructor
内设置初始值,如下所示:
constructor(props){
super(props);
let data = props.profileCandidate;
this.state = {
summary: data ? data.summary || null,
profileCandidateCollectionId: data ? data.id : ''
}
}