2014-10-16 81 views

回答

18

我没有使用Angular,但是阅读上面的链接,似乎你正在尝试编写一些你不需要处理的东西。您可以在React组件层次结构中(通过this.setState())更改状态,并且React将使您的组件重新呈现(有效地“倾听”更改)。 如果你想从您的层次结构,然后另一部分为“听”你有两种选择:

  1. 通处理器从一个共同的母公司下(通过道具),并让他们更新父的状态,导致下面的层次结构父母被重新呈现。
  2. 或者,为了避免处理程序级联下来的处理程序爆炸,您应该查看flux pattern,它将您的状态移动到数据存储并允许组件观察它们的更改。 Fluxxor plugin对于管理这个非常有用。
+2

但是,当您需要获取使用(部分)状态作为url /参数的远程数据时呢? – RnMss 2016-05-19 08:47:22

+0

@RnMss - 查看redux和reducers(http://redux.js.org/docs/basics/Reducers.html)并重新选择(https://github.com/reactjs/reselect)。 – edoloughlin 2016-12-15 22:35:07

185

以下lifecycle methods将在状态更改时调用。您可以使用提供的参数和当前状态来确定是否有意义的改变。

componentWillUpdate(object nextProps, object nextState) 
componentDidUpdate(object prevProps, object prevState) 
+2

当时需要触发的方法时在另一部件的属性是(通过回调向上一个,经由支柱向下一个)更新,并在与所述螺旋桨的分量附加'componentDidUpdate'被处方权。谢谢你。 – 2017-04-19 04:51:29

19

我认为你应该在组件生命周期以下使用,就好像你有一个输入属性,在更新时需要触发你的组件更新,那么这是最好的地方,因为它会在渲染你之前调用它更新组件状态以反映在视图上。

componentWillReceiveProps: function(nextProps) { 
    this.setState({ 
    likesIncreasing: nextProps.likeCount > this.props.likeCount 
    }); 
} 
+0

这是教科书的方式来做到这一点,当你使用道具,是的。谢谢。 – vbullinger 2018-02-07 20:50:08