Skip to content

Instantly share code, notes, and snippets.

@jorarmarfin
Created July 9, 2025 04:31
Show Gist options
  • Select an option

  • Save jorarmarfin/bba626ac7c77545e43939d5a9ca89cc2 to your computer and use it in GitHub Desktop.

Select an option

Save jorarmarfin/bba626ac7c77545e43939d5a9ca89cc2 to your computer and use it in GitHub Desktop.
import { create } from 'zustand'
interface Bear {
id: number;
name: string;
}
interface BearState {
blackBears: number;
polarBears: number;
pandaBears: number;
bears: Bear[];
computed: {
totalBears: number;
},
increaseBlackBears: (by: number) => void;
increasePolarBears: (by: number) => void;
increasePandaBears: (by: number) => void;
doNothing: () => void;
addBear: () => void;
clearBears: () => void;
}
export const useBearStore = create<BearState>()((set, get) => ({
blackBears: 10,
polarBears: 5,
pandaBears: 1,
bears: [ { id: 1, name: 'Oso #1' } ],
computed: {
get totalBears() {
return get().blackBears + get().polarBears + get().pandaBears + get().bears.length;
}
},
increaseBlackBears: (by: number) => set((state) => ({ blackBears: state.blackBears + by })),
increasePolarBears: (by: number) => set((state) => ({ polarBears: state.polarBears + by })),
increasePandaBears: (by: number) => set((state) => ({ pandaBears: state.pandaBears + by })),
doNothing: () => set(state => ({ bears: [...state.bears] })),
addBear: () => set(state => ({
bears: [...state.bears, { id: state.bears.length + 1, name: `Oso #${ state.bears.length + 1 }` }]
})),
clearBears: () => set({ bears: [] })
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment