Ilence Ye's Notes

Zustand

define and consume state

Define state:

ts
import { create } from "zustand";

const useUserStore = create(() => ({
  firstName: "Ilence",
}));

Consume state:

tsx
function Header() {
  const firstName = useUserStore((state) => state.firstName);

  return (
    <header>
      <h1>{firstName}</h1>
    </header>
  );
}

update state

ts
// ...

type State = {
  firstName: string;
};

type Action = {
  updateFirstName: (firstName: State["firstName"]) => void;
};

const useUserStore = create<State & Action>((set) => ({
  // ...
  updateFirstName: (firstName) => set(() => ({ firstName })),
}));
tsx
function Profile() {
  const firstName = useUserStore((state) => state.firstName);
  const updateFirstName = useUserStore((state) => state.updateFirstName);

  return (
    <div>
      <label>
        First name
        <input
          type="text"
          value={firstName}
          onChange={(e) => updateFirstName(e.target.value)}
        />
      </label>
    </div>
  );
}

参考资料

https://zustand.docs.pmnd.rs/guides/updating-state