如何在处于“待处理”状态的“createAsyncThunk”上发送自定义参数?

Jos*_*uez 6 redux redux-async-actions redux-toolkit

fetchUserById()创建时,其输出响应被定义。

const fetchUserById = createAsyncThunk<{user: UserInterface, id: number}, number>(
  'users/fetchByIdStatus',
  async (userId) => {
    const response = await userAPI.fetchById(userId)
    return {user: response.data, id: userId}
  }
);

const userSlice = createSlice({
  name: "users",
  initialState: [],
  reducers: {},
  extraReducers: (builder) => {
    builder.addCase(fetchUserById.pending, (state, { payload }) => {
      // how I configured custom value for this payload?
      // I need to send the user id.
    });
    builder.addCase(fetchUserById.fulfilled, (state, {payload}) => {
      /**
       * @var {UserInterface} user
       * @var {number} id;
       */
      const {id, user} = payload;
      state[id].loading = false;
      state[id].user = user;
    });
  },
});
Run Code Online (Sandbox Code Playgroud)

但是,当操作处于“待处理”状态时,如何定义响应?

Mat*_*ski 13

您传入的参数createAsyncThunk将在 中可用action.meta.arg。因此,在您的示例中,您可以这样引用:

builder.addCase(fetchUserById.pending, (state, { meta }) => {
      console.log(meta.arg); // meta.arg will have whatever value was passed as `userId`
    });
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这很有意义。“meta.arg”或“action.meta.arg”也可以在“fulfilled”和“rejected”处使用。 (2认同)
  • 除了参数之外,是否可以将其他数据从操作创建者传递到挂起的减速器? (2认同)