API 响应后 Redux 工具包状态未更新

Redux toolkit state is not updating after API response

redux 工具包的新手。

Redux reducer 在 API 响应后不更新状态,如果在 API 之前更新状态调用它的工作正常,下面描述了我的代码

import { createSlice } from "@reduxjs/toolkit";

const initialState = {
  value: 0,
};

export const userSlice = createSlice({
  name: "user",
  initialState,
  reducers: {
    allUsers: (state) => {
      state.value = 2; //state is updating here
      fetch("http://bss-api.test/api/admin/users")
        .then((response) => response.json())
        .then((result) => {
          state.value = 5; //state is not updating here
        })
        .catch((e) => {
          console.log(e);
        });
    },
  },
});

export const { allUsers } = userSlice.actions;
export default userSlice.reducer;

你必须从不 运行 任何减速器中的异步逻辑

任何异步逻辑都属于外部 reducer,例如在 thunk 中:

此外,所有 Redux 更新是由调度一个动作引起的。

我们建议使用 RTK 的 createAsyncThunk 实用程序来帮助根据请求的承诺自动定义和调度操作:

通过理解 RTK

createAsyncThunk 效用解决了这个问题

在下面的代码中描述

import { createSlice, createAsyncThunk} from "@reduxjs/toolkit";

export const getUsers = createAsyncThunk(
    'getUsers',
    async ({ limit }, { dispatch, getState }) => {
      return fetch(
        `http://bss-api.test/api/admin/users`
      ).then((res) => res.json())
    }
  )

export const userSlice = createSlice({
name:'user',
initialState:{
    list:[],
    status:null
},
extraReducers: {
    [getUsers.pending]: (state, action) => {
      state.status = 'loading'
    },
    [getUsers.fulfilled]: (state, { payload }) => {
      state.list = payload
      state.status = 'success'
    },
    [getUsers.rejected]: (state, action) => {
      state.status = 'failed'
    },
  },
});


export default userSlice.reducer