0Pricing
TypeScript Academy · Lekcja

Wzorce typowania store’ów Zustand

Definiuj typowane store’y Zustand za pomocą interfejsów i akcji.

Wzorce typowania store’ów Zustand to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Dlaczego warto typować Zustand

Zustand to minimalistyczna biblioteka do zarządzania stanem. Dzięki prawidłowej integracji z TypeScript uzyskują Państwo bezpieczne typowo odczyty store'a, akcje i selektory bez zbędnego kodu.

import { create } from "zustand";

Podstawowy typowany store

Zdefiniuj interfejs store'a i przekaż go jako parametr generyczny do create.

interface CounterStore {
  count: number;
  increment: () => void;
  decrement: () => void;
}

const useCounter = create<CounterStore>((set) => ({
  count: 0,
  increment: () => set((s) => ({ count: s.count + 1 })),
  decrement: () => set((s) => ({ count: s.count - 1 })),
}));

Odczytywanie stanu store'a

Użyj hooka z selektorem, aby odczytać określone fragmenty stanu. TypeScript wywnioskuje typ zwracany na podstawie selektora.

function Counter() {
  const count = useCounter((s) => s.count);       // number
  const increment = useCounter((s) => s.increment); // () => void
  return <button onClick={increment}>{count}</button>;
}

Rozdzielanie stanu i akcji

Popularny wzorzec oddziela właściwości stanu od metod akcji w interfejsie, zapewniając przejrzystszą organizację.

interface State { count: number; }
interface Actions { increment: () => void; reset: () => void; }
type CounterStore = State & Actions;

Asynchroniczne akcje w Zustand

Zustand natywnie obsługuje asynchroniczne akcje — wystarczy, że funkcja akcji wewnątrz creatora będzie asynchroniczna.

interface UserStore {
  users: User[];
  fetchUsers: () => Promise<void>;
}

const useUserStore = create<UserStore>((set) => ({
  users: [],
  fetchUsers: async () => {
    const data = await api.getUsers();
    set({ users: data });
  },
}));

Typowanie middleware immer

Użyj middleware immer w Zustand do aktualizacji w stylu mutowalnym. Typ store'a zostanie prawidłowo przekazany.

import { immer } from "zustand/middleware/immer";

const useStore = create<CounterStore>()(
  immer((set) => ({
    count: 0,
    increment: () => set((state) => { state.count++; }),
  }))
);

Middleware devtools

Połącz devtools z prawidłowym typowaniem, aby włączyć obsługę Redux DevTools przy zachowaniu typów.

import { devtools } from "zustand/middleware";

const useStore = create<CounterStore>()(
  devtools(
    (set) => ({ count: 0, increment: () => set({ count: 1 }) }),
    { name: "CounterStore" }
  )
);

Typowanie utrwalonego store'a

Middleware persist serializuje stan do localStorage. Należy typować go prawidłowo za pomocą interfejsu częściowego stanu.

import { persist } from "zustand/middleware";

const useStore = create<CounterStore>()(
  persist(
    (set) => ({ count: 0, increment: () => set((s) => ({ count: s.count + 1 })) }),
    { name: "counter-storage" }
  )
);

Wzorzec typowanych slice'ów

W przypadku dużych store'ów podziel je na typowane slice'y, które zostaną połączone w jednym wywołaniu create.

type UserSlice = { users: User[]; setUsers: (u: User[]) => void; };
type UiSlice = { modal: boolean; openModal: () => void; };
type AppStore = UserSlice & UiSlice;

Subskrybowanie poza React

Uzyskaj dostęp do stanu store'a i subskrybuj zmiany poza komponentami React, korzystając z typowanego API store'a.

// Access current state outside React
const count = useCounter.getState().count;

// Subscribe to changes
useCounter.subscribe((state) => console.log(state.count));

Podsumowanie: typowanie Zustand

Typowanie Zustand: zdefiniuj interfejs store'a, przekaż go do create, używaj selektorów do typowanych odczytów stanu oraz nakładaj middleware (immer, devtools, persist) za pomocą wzorca curry, aby zapewnić prawidłowy przepływ typów.

Szybkie sprawdzenie

Jak odczytać konkretny fragment stanu Zustand w komponencie bez ponownych renderowań spowodowanych niepowiązanymi zmianami?

Czego się Państwo nauczyli

Store'y Zustand są typowane przez przekazanie interfejsu jako parametru generycznego do create. Należy używać funkcji selektora do wydajnych i bezpiecznych typowo odczytów stanu. Middleware, takie jak immer, devtools i persist, należy łączyć za pomocą wzorca curry Zustand, aby zapewnić prawidłowe wnioskowanie typów w TypeScript.

Często zadawane pytania

Czy lekcja „Wzorce typowania store’ów Zustand” jest bezpłatna?

Tak — pełny tekst „Wzorce typowania store’ów Zustand” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzorce typowania store’ów Zustand”?

Definiuj typowane store’y Zustand za pomocą interfejsów i akcji. Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?

Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wzorce typowania store’ów Zustand”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?

Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typowanie slice’ów i thunków Redux Toolkit
  2. Wzorce typowania store’ów Zustand
  3. XState: typowane maszyny stanów
  4. Stan pochodny i selektory z typami
← Powrót do TypeScript Academy