Налаштування State Management (Zustand) для React-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування State Management (Zustand) для React-застосунку
Проста
від 4 годин до 2 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Настройка State Management (Zustand) для React-додатку

Zustand — мініматалістична бібліотека управління станом для React. Ніякого бойлерплейту, ніяких провайдерів, ніякого контексту. Стор — це хук, який працює поза деревом компонентів та не викликає зайвих ре-рендерів.

Підходить для більшості SPA середнього розміру, де Redux надмірний, а вбудованого useState вже недостатньо.

Що входить у роботу

Встановлення та настройка Zustand під конкретний проект: структура сторів, типізація TypeScript, middleware, інтеграція з devtools, персистентність, розбивка на слайси при необхідності.

Встановлення

npm install zustand
# або
pnpm add zustand

Ніяких peer-залежностей. Розмір пакету — близько 1 КБ gzipped.

Базовий стор

import { create } from 'zustand'

interface CartState {
  items: CartItem[]
  total: number
  addItem: (item: CartItem) => void
  removeItem: (id: string) => void
  clearCart: () => void
}

export const useCartStore = create<CartState>((set, get) => ({
  items: [],
  total: 0,

  addItem: (item) =>
    set((state) => {
      const items = [...state.items, item]
      return { items, total: items.reduce((sum, i) => sum + i.price, 0) }
    }),

  removeItem: (id) =>
    set((state) => {
      const items = state.items.filter((i) => i.id !== id)
      return { items, total: items.reduce((sum, i) => sum + i.price, 0) }
    }),

  clearCart: () => set({ items: [], total: 0 }),
}))

Використання в компоненті — просто хук:

function CartButton() {
  const { items, addItem } = useCartStore()
  // компонент ре-рендерится тільки якщо items або addItem змінилися
  return <button onClick={() => addItem(product)}>У кошик ({items.length})</button>
}

Селектори та оптимізація ре-рендерів

За замовчанням компонент підписується на весь стор. Щоб обмежити підписку — передаємо селектор:

// ре-рендер тільки при змінені total
const total = useCartStore((state) => state.total)

// кілька значень — через shallow comparison
import { useShallow } from 'zustand/react/shallow'

const { items, clearCart } = useCartStore(
  useShallow((state) => ({ items: state.items, clearCart: state.clearCart }))
)

Middleware: devtools + persist

import { create } from 'zustand'
import { devtools, persist } from 'zustand/middleware'

export const useAuthStore = create<AuthState>()(
  devtools(
    persist(
      (set) => ({
        user: null,
        token: null,
        login: (user, token) => set({ user, token }, false, 'auth/login'),
        logout: () => set({ user: null, token: null }, false, 'auth/logout'),
      }),
      {
        name: 'auth-storage',
        // збереження тільки token, не весь стор
        partialize: (state) => ({ token: state.token }),
      }
    ),
    { name: 'auth' }
  )
)

Терміни

Базова настройка Zustand для проекту — 1–2 години. Інтеграція з React Router та Tanstack Query — 2–3 години. Повна архітектура сторів для великого додатку — 1 день.