redux-toolkit 异步请求
时间: 2023-08-07 17:06:57 浏览: 155
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` 等方法,这些方法可以帮助我们更好地处理异步请求。
阅读全文