createAsyncThunk

一、 创建异步函数

javascript 复制代码
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import { getStuListApi } from '../api/stuApi';

// 1. 创建异步 thunk
const fetchStudents = createAsyncThunk(
  'students/fetchStudents',
  async () => {
    const response = await getStuListApi();
    return response;
  }
);

// 2. 创建 slice
const studentsSlice = createSlice({
  name: 'students',
  initialState: {
    list: [],
    loading: false,
    error: null,
  },
  reducers: {
    // 同步 reducers...
  },
  // 3. 使用 extraReducers 处理异步 action
  extraReducers: (builder) => {
    builder
      // pending:请求开始
      .addCase(fetchStudents.pending, (state) => {
        state.loading = true;
        state.error = null;
      })
      // fulfilled:请求成功
      .addCase(fetchStudents.fulfilled, (state, action) => {
        state.loading = false;
        state.list = action.payload;
      })
      // rejected:请求失败
      .addCase(fetchStudents.rejected, (state, action) => {
        state.loading = false;
        state.error = action.error.message;
      });
  },
});

export default studentsSlice.reducer;

二、在组件中使用

import 复制代码
import { fetchStudents } from '../store/modules/students';

function StudentsList() {
  const dispatch = useDispatch();
  const { list, loading, error } = useSelector((state) => state.students);

  useEffect(() => {
    dispatch(fetchStudents());
  }, [dispatch]);

  if (loading) return <div>加载中...</div>;
  if (error) return <div>错误: {error}</div>;

  return (
    <div>
      {list.map((student) => (
        <div key={student.id}>{student.name}</div>
      ))}
    </div>
  );
}
相关推荐
小霖家的混江龙1 小时前
从 0 到 1 实现一个 useState
前端·javascript·react.js
晓得迷路了1 小时前
栗子前端技术周刊第 118 期 - Oxfmt Beta、Angular GitHub stars、React 基金会...
前端·javascript·react.js
AAA阿giao15 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
昨晚我输给了一辆AE8617 小时前
为什么现在不推荐使用 React.FC 了?
前端·react.js·typescript
不会敲代码117 小时前
深入浅出 React 闭包陷阱:从现象到原理
前端·react.js
不会敲代码117 小时前
React性能优化:深入理解useMemo和useCallback
前端·javascript·react.js
不会敲代码11 天前
从入门到进阶:手写React自定义Hooks,让你的组件更简洁
前端·react.js
pe7er1 天前
状态提升:前端开发中的状态管理的设计思想
前端·vue.js·react.js
晚风予星2 天前
Ant Design Token Lens 迎来了全面升级!支持在 .tsx 或 .ts 文件中直接使用 Design Token
前端·react.js·visual studio code
青青家的小灰灰2 天前
React 架构进阶:自定义 Hooks 的高级设计模式与最佳实践
前端·react.js·前端框架