我读了很多 Redux 教程,所有教程都返回默认情况而不是 throw,他们写的是这样的:
const counter = (state = 0, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
};
既然我们已经知道开发人员一定已经被分派(dispatch)了不存在的操作类型,为什么不抛出错误呢?像这样:
const counter = (state = 0, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
throw new Error(`Unknow action type: ${action.type}`)
}
};
为什么不扔?
最佳答案
对于 Redux,您可能有多个 reducer ,您可以使用 combineReducers
将它们组合起来形成一个存储。当您调度一个操作时,它会被调度到所有 reducer ,并且仅调度到预期的 reducer 。因此,您将有一个返回当前状态的默认情况。
当该操作被分派(dispatch)到所有 reducer 时,只有必须处理该操作的 reducer 才会监听该操作并更新状态。这可能会导致操作被调度,但不会被任何 reducer 处理,但肯定不会导致问题,并且永远不会发生,除非您忘记编写此代码。
但是,如果您使用单个 reducer 而不将它们组合起来(通常是使用 useReducer
钩子(Hook)的情况),则如果没有分派(dispatch)匹配的操作,您可能会抛出错误。
关于javascript - 为什么返回default case而不是扔进Redux的reducer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55877893/