reactjs - creactAsyncThunk 中的 action.payload 未定义

标签 reactjs react-redux redux-toolkit

我正在尝试使用带有 的 axios 从 api 获取用户数据createAsyncThunk ,并希望用户数据由 调度的已完成操作存储在状态中createAsyncThunk .
docs 中所述

if the promise resolved successfully, dispatch the fulfilled action with the promise value as action.payload.


但是在 中未定义的 action.payload完成的 Action 创建者 .
这是我的代码。
/// Create Async Thunk
export const fetchUserData = createAsyncThunk(
  'user/fetchUserData',
  (payload, { dispatch }) => {
    axios
      .get('/user')
      .then(res => {
        console.log(res.data);
        //Used this as a work around for storing data
        dispatch(setUser(res.data));

        return res.data;
       })
      .catch(err => {
        console.error(err);
        return err;
      });
  }
);

/// On Fulfilled
const userSlice = createSlice({
...
  extraReducers:{
  ...
  [fetchUserData.fulfilled]: (state, action) => {
        // Payload is undefined
        state.data = action.payload
      },
  }
}

最佳答案

createAsyncThunk接受两个参数:

  • type
  • payloadCreator

  • 哪里payloadCreator是一个回调函数,应该返回 promise (包含一些异步逻辑的结果)或 (同步)。
    所以,你可以写:
    export const fetchUserData = createAsyncThunk(
      'user/fetchUserData',
      (payload, { dispatch }) => {
        return axios.get('/user'); // Return a promise
      }
    );
    
    或者
    export const fetchUserData = createAsyncThunk(
      'user/fetchUserData',
      async (payload, { dispatch, rejectWithValue }) => {
        try {
          const response = await axios.get('/user')
          return response // Return a value synchronously using Async-await
        } catch (err) {
          if (!err.response) {
            throw err
          }
          return rejectWithValue(err.response)
        }
      }
    );
    

    关于reactjs - creactAsyncThunk 中的 action.payload 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63128875/

    相关文章:

    javascript - React Router v4 重定向传递状态未定义

    javascript - React Native : Props and state changed, 但未重新渲染

    reactjs - 如何使用 React Navigation 5 在 Action Creator 中导航到屏幕

    javascript - 如何向 TS 表明 store 中的值是有值(value)的,即使它是可选的?

    reactjs - 如何为我的 <App/> 提供在客户端和服务器渲染上构建不同且 <App/> 及其 thunk 需要的数据?

    javascript - 交换数组 : ReactJS 中的两个对象

    css - 为什么设置了 dialogClassName 和使用 Styled JSX 的 Bootstrap 模态样式需要全局标记?

    javascript - JSX 外部元素的条件修改

    reactjs - 如何以编程方式控制行的切换?

    javascript - 可以从 redux-toolkit 中的另一个 Action 调度 slice 的 Action 吗?