shouldComponentUpdate将不会收到最新状态

时间:2015-08-20 15:39:12

标签: refluxjs

我使用Reflux.connect方法来更改组件状态,但我无法在shouldComponentUpdatenextState之间的this.state中获得不同的部分。实际上,this.state调用了nextState时,shouldComponentUpdate已经有了我期望在 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 } 中的新值。

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

    // Convert the rotation-vector to a 4x4 matrix.
    SensorManager.getRotationMatrixFromVector(mRotationMatrixFromVector, event.values);
    SensorManager.remapCoordinateSystem(mRotationMatrixFromVector,
            SensorManager.AXIS_X, SensorManager.AXIS_Z,
            mRotationMatrix);
    SensorManager.getOrientation(mRotationMatrix, orientationVals);

    // Optionally convert the result from radians to degrees
    orientationVals[0] = (float) Math.toDegrees(orientationVals[0]);
    orientationVals[1] = (float) Math.toDegrees(orientationVals[1]);
    orientationVals[2] = (float) Math.toDegrees(orientationVals[2]);

    tv1.setText("Yaw:" + orientationVals[0]);
    tv2.setText("Pitch:" + orientationVals[1]);
    tv3.setText("Roll:" + orientationVals[2]);


}

1 个答案:

答案 0 :(得分:5)

确保您没有改变状态,而是返回它的新副本。如果您的商店仅更改状态中的字段,则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中,因为它允许您快速确定状态是否发生了变化。尝试养成在更改状态时始终返回新副本的习惯,并且除非先将其克隆,否则永远不要更改为状态内的任何内容。

Immutablity in React {
{3}}