我使用Reflux.connect
方法来更改组件状态,但我无法在shouldComponentUpdate
和nextState
之间的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]);
}
答案 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}}