import { create } from "zustand";
 
type CounterState = {
  count: number;
  name: string;
  add: () => void;
  sub: () => void;
  double: () => void;
  changeName: () => void;
};
 
export const useCounter = create<CounterState>((set) => ({
  count: 0,
  name: "",
  add: () => set((state) => ({ count: state.count + 1 })),
  sub: () => set((state) => ({ count: state.count - 1 })),
  double: () => set((state) => ({ count: state.count * 2 })),
  changeName: () => set(() => ({ name: "heyi" + Math.random() })),
}));
import { useEffect } from "react";
import { useCounter } from "../../stores/useCounter";
 
const Counter = () => {
  const count = useCounter((state) => state.count);
  return <div>count: {count}</div>;
};
 
const Name = () => {
  const name = useCounter((state) => state.name);
  return <div>name: {name}</div>;
};
 
export const ZustandDemo = () => {
  const add = useCounter((state) => state.add);
  const sub = useCounter((state) => state.sub);
  const double = useCounter((state) => state.double);
  const changeName = useCounter((state) => state.changeName);
 
  return (
    <div>
      <Counter />
      <Name />
 
      <div>
        <button onClick={add}>+</button>
        <button onClick={sub}>-</button>
        <button onClick={double}>*2</button>
 
        <button onClick={changeName}>改变名字</button>
      </div>
    </div>
  );
};