Redux为何在Store中创建名为'0'的状态字段?能否禁用?
问题原因与解决方案
嘿,这个问题我之前也踩过坑!根源就在你设置的初始状态上——你把authentication reducer的初始值写成了数组 [{isAuthenticated: false}],而不是一个普通的对象。
Redux在处理数组类型的state时,会把数组的索引(这里就是第一个元素的索引0)当成state对象的键来存储,所以你才会在DevTools和控制台里看到那个名为0的字段。这不是Redux的bug,是它处理数组类型state的正常行为,但显然不符合你的预期。
怎么解决?
直接把初始状态改成对象就好,不需要数组包裹:
const authentication = (state = {isAuthenticated: false}, action) => { switch (action.type) { case USER_LOGIN_TRY: return Object.assign({}, state, userLogin(action.email)) default: return state; } }
这样修改后,你的authentication state就会是一个直接包含isAuthenticated属性的对象,不会再出现那个多余的0字段,也不用额外写代码去处理它啦。另外,你之前用Object.assign合并state的逻辑,在对象类型的state下才是真正符合预期的,数组状态下的合并其实是不符合你想要的认证状态管理逻辑的。
内容的提问来源于stack exchange,提问作者Denis Savenko
相关产品推荐
相关产品推荐

