我可以使用 redux 工具包访问带有 axios 的 createAsyncThunk 中的状态吗?

riz*_*zji 6 reactjs redux axios redux-toolkit

我对 redux 工具包还很陌生,所以我仍然有一些问题!

按下面的代码,我试图访问状态(loginDetails.usernameloginDetails.password我的内)createAsyncThunk。我显然在这里做错了 - 我尝试createAsyncThunk在不同的文件中编写函数,尝试访问该文件中的状态,然后导入该函数,但无论哪种方式它都失败了。

// Import: Packages
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import axios from "axios";

// AsyncThunk: getUserDetails
export const getUserDetails = createAsyncThunk(
  "userDetails/getUserDetails",
  async () => {
    try {
      const apiUrl = process.env.REACT_APP_URL;

      var config = {
        method: "get",
        url: `${apiUrl}/claimSet?UserName=${state.loginDetails.username}&Password=${state.loginDetails.password}`,
        headers: {
          accept: "application/json",
        },
      };

      const response = await axios(config);
      const data = await response.data;
      return data;
    } catch (error) {
      console.log(error);
    }
  }
);

// Slice: userDetailsSlice
export const userDetailsSlice = createSlice({
  name: "userDetails",
  initialState: {
    loginDetails: {
      username: "",
      password: "",
    },
    details: [],
    status: null,
  },
  reducers: {
    addUsername: (state, { payload }) => {
      state.loginDetails.username = payload;
    },
    addPassword: (state, { payload }) => {
      state.loginDetails.password = payload;
    },
  },
  extraReducers: {
    [getUserDetails.pending]: (state, action) => {
      state.status = "loading";
    },
    [getUserDetails.fulfilled]: (state, { payload }) => {
      state.details = payload;
      state.status = "success";
    },
    [getUserDetails.rejected]: (state, action) => {
      state.status = "failed";
    },
  },
});

// Actions: addUsername, addPassword
export const { addUsername, addPassword } = userDetailsSlice.actions;

// Reducer: userDetailsSlice.reducer
export default userDetailsSlice.reducer;
Run Code Online (Sandbox Code Playgroud)

config url${state.loginDetails.username}等中的代码只是获取状态的许多失败尝试之一。我知道问题的一部分createAsyncThunk是在状态/幻灯片低于之前声明,但我似乎仍然无法找到解决方法。

任何帮助将非常感激!

提前致谢 <3

Dre*_*ese 8

异步函数消耗一个“有效载荷”参数,其次是一个thunkAPI包含getState方法的对象。

有效载荷生成器

thunkAPI:一个对象,包含通常传递给 Redux thunk 函数的所有参数,以及其他选项:

  • dispatch: Redux 存储dispatch方法
  • getState: Redux 存储getState方法
  • extra:设置时给 thunk 中间件的“额外参数”(如果可用)
  • requestId:自动生成的唯一字符串 ID 值,用于标识此请求序列
  • signal:一个AbortController.signal对象,可用于查看应用程序逻辑的另一部分是否已将此请求标记为需要取消。
  • rejectWithValue: rejectWithValue 是一个实用程序函数,您可以在操作创建器中返回它以返回具有定义有效负载的拒绝响应。它会传递你给它的任何值,并在被拒绝操作的负载中返回它。
// AsyncThunk: getUserDetails
export const getUserDetails = createAsyncThunk(
  "userDetails/getUserDetails",
  async (arg, { getState }) => { // <-- destructure getState method
    const state = getState(); // <-- invoke and access state object
    try {
      const apiUrl = process.env.REACT_APP_URL;

      var config = {
        method: "get",
        url: `${apiUrl}/claimSet?UserName=${state.loginDetails.username}&Password=${state.loginDetails.password}`,
        headers: {
          accept: "application/json",
        },
      };

      const response = await axios(config);
      const data = await response.data;
      return data;
    } catch (error) {
      console.log(error);
    }
  }
);
Run Code Online (Sandbox Code Playgroud)