redux-toolkit处理异步函数createAsyncThunk

声明函数,
它接受一个字符串标识符和一个payload创建者回调,执行实际的异步逻辑,并返回一个Promise,该Promise将根据你返回的Promise处理相关动作的调度,以及你的reducers中可以处理的action类型。

import axios from "axios";
import { createAsyncThunk } from "@reduxjs/toolkit";
export const GetPosts = createAsyncThunk(
"post/getPosts", async () => await axios.get(`${BASE_URL}/posts`)
);
export const CreatePost = createAsyncThunk(
"post/createPost",async (post) => await axios.post(`${BASE_URL}/post`, post)
);


在切片中处理

import { createSlice } from "@reduxjs/toolkit";
import { GetPosts, CreatePost } from "../../services";
export const initialState = {
  posts: [],
  loading: false,
  error: null,
};
export const postSlice = createSlice({
name: "post",
initialState: initialState,
extraReducers: {
   [GetPosts.fulfilled]: (state, action) => {
     state.posts = action.payload.data;
   },
   [GetPosts.rejected]: (state, action) => {
    state.posts = [];
   },
   [CreatePost.fulfilled]: (state, action) => {
   state.posts.unshift(action.payload.data);
   },
 },
});
export default postSlice.reducer;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Redux Toolkit 包含一个名为 `createAsyncThunk` 的工具函数,它可以帮助我们轻松地处理异步请求。 使用 `createAsyncThunk` 函数,我们可以定义一个函数处理异步请求,并且该函数会自动生成与请求相关的三个 action:pending(请求开始),fulfilled(请求成功)和 rejected(请求失败)。 下面是一个使用 `createAsyncThunk` 的示例: ```javascript import { createAsyncThunk } from '@reduxjs/toolkit'; import { fetchUser } from './api'; export const getUser = createAsyncThunk( 'user/fetch', async (userId, thunkAPI) => { const response = await fetchUser(userId); return response.data; } ); // 然后在 reducer 中处理请求状态 const userSlice = createSlice({ name: 'user', initialState: { user: null, isLoading: false, error: null, }, reducers: {}, extraReducers: { [getUser.pending]: (state, action) => { state.isLoading = true; }, [getUser.fulfilled]: (state, action) => { state.isLoading = false; state.user = action.payload; }, [getUser.rejected]: (state, action) => { state.isLoading = false; state.error = action.error.message; }, }, }); ``` 在上面的示例中,我们首先使用 `createAsyncThunk` 函数创建了一个名为 `getUser` 的异步 action,它的名称为 `user/fetch`。然后我们在 `extraReducers` 中处理了请求状态。当请求开始时,`getUser.pending` action 会被触发,我们可以在这里将 `isLoading` 设置为 `true`。当请求成功时,`getUser.fulfilled` action 会被触发,我们可以在这里将 `isLoading` 设置为 `false` 并将返回的数据保存在 `user` 属性中。当请求失败时,`getUser.rejected` action 会被触发,我们可以在这里将 `isLoading` 设置为 `false` 并将错误信息保存在 `error` 属性中。 注意,我们在异步函数中的第二个参数 `thunkAPI` 中可以访问 `dispatch`、`getState`、`extra` 和 `fulfillWithValue` 等方法,这些方法可以帮助我们更好地处理异步请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万事胜意sy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值