Redux: Middleware и асинхронные действия

НАВИГАЦИЯ ПО СТРАНИЦЕ

middleware Использование middleware Redux Thunk Использование действий Обработка действий

В Redux middleware — это функция, которая находится между моментом отправки действия и моментом его обработки редюсером. Middleware позволяет добавлять логику к обработке действий, включая обработку асинхронных действий. Одним из наиболее популярных middleware для работы с асинхронными действиями является Redux Thunk. Давайте рассмотрим его использование:

Использование 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, и обрабатывать их в редюсерах как обычные синхронные действия. Это упрощает управление состоянием приложения и обработку асинхронных операций.