2016-08-11 22 views
0

我们使用Redux.js和React.js(React-Redux),在reducer中我们使用下面的代码(我们正在使用终极版,采取行动减少样板):Redux/React-Redux - 在缩减器中使用“state = XXX”

const update = require('react/lib/update'); 
const myReducer = handleActions 
({ 
    [myAction]: (state, action) => { 
     state = update(state, { 
      something: {$set: !state.someProperty} 
     }); 
     return someFunction(state); 
    } 
}) 

我们使用updateReact Immutability Helpers但分配结果到使用state =状态。

这是否违反basic Redux guidlines - 即突变状态?看起来是这样的,但代码似乎很好,很快,并且还原devtools显示状态更改正确...

回答

1

您的示例好吧,因为您实际上并没有改变对象的内容state变量指向。相反,您只需更新名为state的本地变量即可指向其他对象。

了解Javascript中的变量和引用是如何工作是非常重要的,这将有助于清除这里发生的事情。

为了清楚起见,我个人建议做const newState = update(....)

+1

谢谢,现在我明白了!我很困惑,因为当改变局部变量'state'的**内容**(通过使用'push'或设置属性或其他)时,你**正在**改变实际的状态对象。但通过将引用改为别的东西,JS不会更改原始对象,但会更改局部变量的引用。好的:-) –