如果页面未刷新,componentWillReceiveProps将跳过加载

时间:2017-06-12 07:12:41

标签: reactjs meteor

当我渲染页面时,我使用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
    });
  }

1 个答案:

答案 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 : ''
   }
}