3

我使用Reflux.connect方法来更改组件状态,但我无法获得 和 之间的不同shouldComponentUpdate部分。实际上,在被调用时已经有了我期望的新值。nextStatethis.statethis.statenextStateshouldComponentUpdate

当我想将 shouldComponentUpdate 与 Reflux 一起使用时,我需要做什么?

  var component = React.createClass({
     mixins: [Reflux.connect(store1, 'store1data'),
              Reflux.connect(store2, 'store2data')],

     shouldComponentUpdate: function(nextProps, nextState) {
        //Here this.state.store1data is equal to nextState.store1data
     }
4

1 回答 1

5

确保您没有改变状态,而是返回它的新副本。如果您的商店仅更改state 内的字段,则this.state指针已经指向突变状态。

所以在你的 store1 中,而不是:

store1Data.someKey = newValue;
this.trigger(store1Data)

尝试做:

store1Data = _.assign({}, store1Data, {someKey: newValue}); // this uses lodash, for example
this.trigger(store1Data)

这样,您每次更改时都会获得 store1Data 的新副本。

在处理状态时,不变性是一个重要的概念,尤其是在 React/Flux 中,因为它允许您快速确定状态是否已更改。尝试养成在更改状态时始终返回新副本的习惯,并且永远不要更改状态内的任何内容,除非您先克隆它。

React
ImmutableJs中的不可变性

于 2015-08-21T11:46:43.767 回答