Redux Selector中state属性名是否必须与store注册的reducer名一致?
Redux属性名匹配规则问题解答
这是Redux的强制规则,而非可选的约定规范,底层逻辑如下:
- 当你调用
configureStore传入reducer配置对象时,Redux会自动把该对象的每一个键,作为根state对象的顶层属性,属性值就是对应reducer维护的状态切片。
你给出的示例里使用了对象简写语法:
const store = configureStore({ reducer: { todoReducer, }, });
等价于显式声明键值对:
const store = configureStore({ reducer: { todoReducer: todoReducer, }, });
也就意味着根state上会挂载一个名为todoReducer的属性,存储待办相关的所有状态。
2. Selector的作用是从根state中读取对应属性,如果你写的属性名和reducer配置中的键名不匹配,读取到的值就是undefined,后续对undefined调用.map方法自然会抛出类型错误。
如果你希望调整selector的写法,只需要同步修改reducer配置的键名即可,比如把键名简化为更易读的业务相关命名:
// store 定义调整 const store = configureStore({ reducer: { todos: todoReducer, }, }); // 对应selector同步修改为 export const selectTodoSlice = (state) => state.todos;
内容的提问来源于stack exchange,提问作者Nima Zarei
相关产品推荐
相关产品推荐

