Redux: Middleware и асинхронные действия
НАВИГАЦИЯ ПО СТРАНИЦЕ
В Redux
Использование middleware для обработки асинхронных действий:
Redux Thunk позволяет вам создавать действия, которые не являются обычными объектами, а функциями. Эти функции могут быть асинхронными и выполнять любую логику, включая отправку асинхронных запросов к API.
// actions.js
export const fetchData = () => {
return async dispatch => {
try {
dispatch({ type: 'FETCH_DATA_REQUEST' });
const response = await fetch('https://api.example.com/data');
const data = await response.json();
dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data });
} catch (error) {
dispatch({ type: 'FETCH_DATA_FAILURE', error: error.message });
}
};
};
Пример работы с Redux Thunk :
// store.js
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';
const store = createStore(rootReducer, applyMiddleware(thunk));
export default store;
Использование действий в React компонентах:
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { fetchData } from './actions';
const DataComponent = () => {
const dispatch = useDispatch();
const data = useSelector(state => state.data);
useEffect(() => {
dispatch(fetchData());
}, [dispatch]);
return (
<div>
<h1>Data</h1>
{data.loading && <p>Loading...</p>}
{data.error && <p>Error: {data.error}</p>}
{data.items && (
<ul>
{data.items.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
)}
</div>
);
};
export default DataComponent;
Обработка действий с помощью Redux Thunk:
Redux Thunk позволяет вам отправлять асинхронные действия, такие как запросы к API, и обрабатывать их в редюсерах как обычные синхронные действия. Это упрощает управление состоянием приложения и обработку асинхронных операций.