对多个 createAsyncThunk 函数使用一个 filfilled

Use one filfilled for several createAsyncThunk functions

我有两个 createAsyncThunk - signInsignUp 可以同时使用一个 fulfilled reducer 吗?原因是 fulfilled reducersignIn and signUp 相同。示例:

extraReducers: (builder) => {
builder.addCase(signInUser.fulfilled, (state, { payload }) => {
  state.isPending = false;
  state.email = payload.username;
  state.username = payload.username;
  state.first_name = payload.first_name;
  state.last_name = payload.last_name;
  state.title = payload.title;
  state.organization = payload.organization;
  state.isNew = payload.isNew;
  state.isPremium = payload.isPremium;
  state.id = payload.id;
  state.error = '';
  state.access_token = payload.access_token;
  localStorage.setItem(REFRESH_TOKEN, payload.refresh_token);
});
}

是的,有用于此目的的实用程序:watch this

我在重构后找到了一个明显的解决方案,你可以将 statepayload 传递给另一个函数,它可以像在 [=15= 中那样设置 state ].示例:

    builder.addCase(signInUser.fulfilled, (state, { payload }) => {
      assignStateWithUser(state, payload);
    });
    builder.addCase(signUpUser.fulfilled, (state, { payload }) => {
      assignStateWithUser(state, payload);
    });
    builder.addCase(loadUser.fulfilled, (state, { payload }) => {
      assignStateWithUser(state, payload);
    });

const assignStateWithUser = (state: initialStateUser, payload: User) => {
  state.email = payload.username;
  state.username = payload.username;
  state.first_name = payload.first_name;
  state.last_name = payload.last_name;
  state.title = payload.title;
  state.organization = payload.organization;

};

状态和负载类型:
type initialStateUser = RequestPending & { error: string } & User;

export interface User {
  id: number;
  username: string;
  first_name: string;
  last_name: string;
  email: string;
  title: string;
  organization: string;
};