javascript - extraReducers 执行的顺序是什么,在 reducer 之前还是之后?
问题描述
来自 redux-toolkit 的 createSlice:https ://redux-toolkit.js.org/api/createslice
我想知道 extraReducers 是在减速器之前还是之后执行的。或者如果无法确定执行顺序。
这是一个人为的例子:
在调用 increment 之后,能否确定累积值是多少?
const count = createSlice({
name: 'count',
initialState: {
count: 0,
accumulate: 0,
},
reducers: {
increment: (state) => {
state.count += 1;
},
},
extraReducers: (builder) => {
builder
.addMatcher(
(action) => {
return action.type === count.actions['increment'].type;
},
(state, action) => {
state.accumulate += state.count;
}
)
},
});
在普通的 redux reducer 中,很容易强制执行这样的命令:
const initialState = {
count: 0,
accumulate: 0
};
export default function reducer(state = initialState, action) {
let { count, accumulate } = state;
switch (action.type) {
case "INCREMENT": {
count += 1;
}
}
accumulate += count;
return {
count,
accumulate
}
}
解决方案
真的没关系。默认案例仅在没有其他案例匹配时执行每个文档,因此它们永远不能同时执行。
https://redux-toolkit.js.org/api/createReducer#builderadddefaultcase
builder.addDefaultCase
添加一个“默认案例”reducer,如果没有为此操作执行 case reducer 和 matcher reducer,则执行该 reducer。
推荐阅读
- r - 使用 R (RPostgreSQL) 连接到 Google Cloud SQL postgresql 时出现问题
- c# - 如何让我的linkedIn 共享网址正常工作
- python - 当有人解释代码时,“L”是什么意思?
- android - onSuccessTask 与 addOnSuccessListener?
- jenkins - 如何使用布尔参数作为构建参数来复制工件?
- excel - 数据名中带有空格的连接字符串 vba 被破坏
- orm - 未在数据库中插入外键值:无法在列中插入 Null
- python - python requests 获取请求调试
- algorithm - 从获取数组的左值或右值返回最大值
- html - 使内联 HTML 元素“不占用空间”而没有任何改变布局的副作用