Часть 1: Основы сброса состояний

1. Необходимость сброса состояний:

  • Проблема: Помимо установки и хранения значений в Store, часто требуется сбрасывать состояния к изначальным значениям.
  • Пример: Счетчик, который должен вернуться к нулю после сброса.

2. Простой способ сброса:

  • Метод сброса: Создание метода, который возвращает значения переменных к исходным (например, в 0).

Пример:

    const useCounterStore = create((set) => ({
      count: 0,
      increment: () => set((state) => ({ count: state.count + 1 })),
      decrement: () => set((state) => ({ count: state.count - 1 })),
      reset: () => set({ count: 0 }),
    }));

3. Кнопка сброса:

  • Добавление кнопки: Добавление кнопки “Reset” для вызова метода сброса.

Пример:

    const CounterComponent = () => {
      const { count, increment, decrement, reset } = useCounterStore();
    
      return (
        <div>
          <h1>{count}</h1>
          <button onClick={increment}>+</button>
          <button onClick={decrement}>-</button>
          <button onClick={reset}>Reset</button>
        </div>
      );
    };
Часть 2: Сброс состояний в нескольких хранилищах

1. Проблематика сброса в нескольких Store:

  • Проблема: Сброс состояний в нескольких Store одновременно может быть сложным.
  • Решение: Необходимость кастомизации функции создания Store (Create функции) для решения этой проблемы.
Часть 3: Кастомизация функции создания Store

1. Создание файла для кастомной функции Create:

  • Функция сбора методов сброса: Функция собирает методы сброса из каждого Store и вызывает их всего одним действием.
  • Использование Set: Для хранения методов сброса используется Set, предотвращая повторения.

2. Реализация кастомной функции Create:

  • Аналогия с оригинальной функцией: Написание функции, аналогичной оригинальной, но с дополнительной логикой для сброса нескольких состояний одновременно.
  • Получение изначального состояния: Возможность получения изначального состояния Store и создание общего метода сброса, добавляемого в Set.

3. Применение кастомной функции:

  • Переопределение импорта: Переопределение импорта функции Create в Store на кастомную версию.
  • Демонстрация работы: Демонстрация работы сброса состояний через новую кнопку “Reset”.

Пример:

// Файл customCreate.js
import { create } from 'zustand';
 
const resetMethods = new Set();
 
const customCreate = (initializer) => {
  const store = create(initializer);
 
  const reset = () => {
    resetMethods.forEach((resetMethod) => resetMethod());
  };
 
  resetMethods.add(store.getState().reset);
 
  return {
    ...store,
    reset,
  };
};
 
export default customCreate;
 
// Применение в Store
import customCreate from './customCreate';
 
const useCounterStore = customCreate((set) => ({
  count: 0,
  increment: () => set((state) => ({ count: state.count + 1 })),
  decrement: () => set((state) => ({ count: state.count - 1 })),
  reset: () => set({ count: 0 }),
}));
 
// Компонент React
const CounterComponent = () => {
  const { count, increment, decrement, reset } = useCounterStore();
 
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={increment}>+</button>
      <button onClick={decrement}>-</button>
      <button onClick={reset}>Reset</button>
    </div>
  );
};

Основные моменты:

  • Сброс состояний: Необходимость сброса состояний к изначальным значениям.
  • Кастомизация функции Create: Создание кастомной функции для сброса состояний в нескольких Store.
  • Использование Set: Хранение методов сброса в Set для предотвращения повторений.
  • Демонстрация работы: Применение кастомной функции и демонстрация сброса состояний через кнопку “Reset”.

Кастомизация функции создания Store в Zustand позволяет эффективно управлять сбросом состояний в нескольких хранилищах, упрощая поддержку и масштабирование приложения.


Назад