Redux 工具包 - 全局拒绝

Redux Toolkit - global reject

我正在使用 Redux Toolkit,并且我有一堆切片。 我有一个名为 sessionSlice 的特定切片,其中包含一些 extraReducers,从其他切片导入 thunks,如下所示:


    [fetchDashboardUserReq.rejected]: (state, action) => {
      setSessionExpired(state, action);
    },
    [fetchDashboardUsersReq.rejected]: (state, action) => {
      setSessionExpired(state, action);
    },
    [fetchDashboardAchievementsReq.rejected]: (state, action) => {
      setSessionExpired(state, action);
    },

setSessionExpired 正在检查错误是否是由于用户的会话已过期造成的。 我正在为一堆不同的 createAsyncThunks 做这个 - 有没有办法拥有一个“全局”rejected 函数,我可以在哪里检查这个?而不是有那么多重复的代码。

提前致谢!

是的,如果您将 `extraReducers' 的构建器回调符号与匹配器一起使用。

Example from the docs:


function isRejectedAction(action) {
  return action.type.endsWith('rejected')
}

createSlice({
  name: 'counter',
  initialState: 0,
  reducers: {},
  extraReducers: (builder) => {
    builder
      .addMatcher(
        isRejectedAction,
        (state, action) => {
          // ...
        }
      )
  },
})

但请记住,reducer 不能有副作用,因此您的 setSessionExpired 方法必须只修改 state,没有任何外部内容。否则你必须使用中间件。