React,componentWillMount()生命周期挂钩

时间:2018-11-08 08:29:04

标签: reactjs

我试图同时在App组件(根组​​件)中传递道具,然后再从App本身传递到Header组件。

我在App和Header Component中都使用了Life Cycle Hooks upto componentWillReceiveProps()。

componentWillMount(),render(),componentDidMount()正在按预期顺序在两个Component中执行。

但是,即使在传递道具时,也不执行componentWillReceiveProps()。这是意外行为,因为componentWillMount()已正常执行!

我将非常感谢您知道为什么会这样!谢谢:)

请通过以下链接检查代码示例:

https://codesandbox.io/s/mjj0q75yoj

请转到图片以更清楚地了解该问题:

componentWillReceiveProps() not being invoked

3 个答案:

答案 0 :(得分:2)

我不明白您为什么期望组件进行更新(谁传递了新的道具?),但是通常您应该使用componentDidUpdate(prevProps, prevState)

还可以考虑通过静态getDerivedStateFromProps(props, state)来管理状态,即:

static getDerivedStateFromProps(props, state){
  // just return the state
  return {
    isLoading: false,
    money: props.money
  }
}

-它在更新时执行init +。

答案 1 :(得分:0)

如官方文档(参见https://reactjs.org/docs/react-component.html)所述

 componentWillReceiveProps()

生命周期方法已过时,应避免使用。

它从未被调用的原因是,为了帮助用户避免它,React开发人员将其重命名了

 UNSAFE_componentWillReceiveProps()

但是您应该避免使用它,因为他们计划弃用该方法

答案 2 :(得分:0)

1。未调用 componentWillReceiveProps()的主要原因是因为我传递给 Header Component 的道具根本没有变化,我一直在传递相同的道具一次又一次。并且 componentWillReceiveProps()仅在每次传递的道具不同时才执行。

这是我的 Header组件问这个问题时的样子。

<Header
      menus={["home", "about", "services", "blog"]}
/>

Header Component仅具有 menus prop 作为数组(在询问此问题时),并且没有事件正在更新此 menus prop ,这就是为什么我的 componentWillReceiveProps()从未在 Header Component 中被调用/调用。

注意:为了简单起见,我现在将另一个道具传递给 Header Component ,并开始在此 prop上测试我的代码,而不是使用数组菜单道具。

 <Header
    menus={["home", "about", "services", "blog"]}  
    prop={this.state.prop}
 />

我正在使用事件处理程序来使我的 state.prop 进行更新:

 // Dynamically sending Props
  handlePropSending = () => {
   this.setState({
    ...this.state,
    prop: this.state.prop + 1
   });
  };

当我点击按钮“将道具发送到标题”时,新道具将发送到 Header Component 和我们的 componentWillReceiveProps 被成功调用并执行。

  1. 应用程序组件

    中的 componentWillReceiveProps 也是同样的问题

    ReactDOM.render(,rootElement);

自从我添加了资金支持(money = {9199})以来,实际上没有资金支持可用于更新资金支持它是值(我们可以将其传递给 App Component ,以调用它的 componentWillReceiveProps 方法)。

注意: 代码现在已更新,并且现在有事件处理程序可确保道具不断更新,并且componentWillReceiveProps()方法确实已成功被调用。

componentWillReceiveProps demonstrated along with other life Cycle Hooks

就像他们说的一样:)一切都好了:)