【发布时间】:2020-05-04 23:56:47
【问题描述】:
使用 Redux 时,保持初始状态的形状至关重要。由于我们无法控制属性,API 调用等副作用的结果/数据将改变状态的形状。例如,考虑这个初始状态:
const book = {
id: 0,
name: 'something'
};
book sub-reducer 会根据 API 数据对其进行如下更新:
//receives `book` part of the state
const bookReducer = (state=book, action) => {
switch(action.type) {
case 'SET_BOOK': {
return { ...action.payload };
} default:
return state;
}
}
可能发生的两种情况:
如果从 API 发送的数据是
null,,那么新生成的状态现在是{},这是扩展运算符的结果。如果 UI 的某些部分要监听状态的book部分,那么它将中断。可能从 API 数据访问各个属性?在这种情况下,需要对属性执行空/未定义检查。有没有更优雅的解决方案?数据中可能还有其他我们可能不感兴趣的属性。可能使用对象映射器来过滤未使用的属性?
处理此类情况并防止状态变得不确定的最佳做法是什么?请分享您如何处理这些场景的经验。
【问题讨论】:
-
这就是为什么您通常将两个现有状态与即将到来的更新合并。
return { ...state, ...action.payload }; -
@GabrielePetrioli 来自 API 的属性值(id 和 name)也可以是
null。在这种情况下,需要执行 null 检查并为属性提供默认值以防止 UI 崩溃。
标签: reactjs redux react-redux