Для обработки асинхронных операций в Zustand можно централизовать логику в Store. Это упрощает компоненты, делает код более переиспользуемым и улучшает его читаемость. Вот пример:

import { create } from 'zustand';
 
const useStore = create((set) => ({
  data: null,
  loading: false,
  error: null,
 
  fetchData: async () => {
    set({ loading: true, error: null });
    try {
      const response = await fetch('https://api.example.com/data');
      const data = await response.json();
      set({ data, loading: false });
    } catch (error) {
      set({ error, loading: false });
    }
  },
}));
 
// Компонент React
const MyComponent = () => {
  const { data, loading, error, fetchData } = useStore();
 
  useEffect(() => {
    fetchData();
  }, [fetchData]);
 
  if (loading) return <div>Загрузка...</div>;
  if (error) return <div>Ошибка: {error.message}</div>;
 
  return (
    <div>
      {data.map((item) => (
        <div key={item.id}>{item.name}</div>
      ))}
    </div>
  );
};

Здесь:

  1. Store содержит состояние: dataloadingerror.
  2. Асинхронная функция fetchData:
    • Устанавливает loading в true и очищает error перед запросом.
    • Выполняет запрос к API.
    • Обновляет состояние данными или ошибкой.
  3. Компонент использует Store:
    • Получает состояние и функцию fetchData.
    • Вызывает fetchData при монтировании.
    • Отображает данные, состояние загрузки или ошибку.

Таким образом, Zustand помогает управлять асинхронными операциями в одном месте, упрощая компоненты и улучшая структуру кода.


Назад