Здравствуйте! Для асинхронных запросов с использованием REDUX Toolkit рекомендуется использовать библиотеку Redux Thunk или Redux Saga.
Redux Thunk является простым и легковесным решением для обработки асинхронных запросов. Оно позволяет определить асинхронные экшены, которые могут диспатчить другие экшены.
Вот пример использования Redux Thunk с REDUX Toolkit:
1. Установите библиотеки Redux Toolkit и Redux Thunk:
```bash
npm install @reduxjs/toolkit redux-thunk
```
2. Создайте асинхронный экшен-креатор с помощью Redux Thunk:
```javascript
import { createAsyncThunk } from '@reduxjs/toolkit';
import { fetchData } from 'api';
export const fetchUserData = createAsyncThunk(
'user/fetchData',
async () => {
const response = await fetchData(); // Ваша асинхронная функция
return response.data;
}
);
```
3. Создайте слайс с использованием Redux Toolkit и определите reducer для обработки запроса:
```javascript
import { createSlice } from '@reduxjs/toolkit';
const userSlice = createSlice({
name: 'user',
initialState: {
data: [],
isLoading: false,
error: null,
},
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchUserData.pending, (state, action) => {
state.isLoading = true;
})
.addCase(fetchUserData.fulfilled, (state, action) => {
state.isLoading = false;
state.data = action.payload;
})
.addCase(fetchUserData.rejected, (state, action) => {
state.isLoading = false;
state.error = action.error.message;
});
},
});
export default userSlice.reducer;
```
4. Добавьте созданный слайс в глобальный store:
```javascript
import { configureStore } from '@reduxjs/toolkit';
import userReducer from 'userSlice';
const store = configureStore({
reducer: {
user: userReducer,
},
});
export default store;
```
5. Используйте асинхронный экшен-креатор для отправки запроса и получения данных в компонентах:
```javascript
import { useDispatch, useSelector } from 'react-redux';
import { fetchUserData } from 'userSlice';
const UserComponent = () => {
const dispatch = useDispatch();
const userData = useSelector((state) => state.user.data);
const isLoading = useSelector((state) => state.user.isLoading);
const error = useSelector((state) => state.user.error);
useEffect(() => {
dispatch(fetchUserData());
}, [dispatch]);
if (isLoading) {
return <div>Loading...</div>;
}
if (error) {
return <div>Error: {error}</div>;
}
return (
<div>
{userData.map((user) => (
<div key={user.id}>{user.name}</div>
))}
</div>
);
};
```
Redux Thunk позволяет легко управлять асинхронными запросами и обновлять состояние приложения с помощью Redux Toolkit. Для более сложных сценариев, таких как управление сложными потоками данных или выполнение дополнительных действий во время запросов, вы также можете рассмотреть вариант использования Redux Saga.