Skip to content

Instantly share code, notes, and snippets.

@wobsoriano
Last active July 6, 2021 18:51
Show Gist options
  • Save wobsoriano/2a6befcae6b51384ecf2bbdef0966303 to your computer and use it in GitHub Desktop.
Save wobsoriano/2a6befcae6b51384ecf2bbdef0966303 to your computer and use it in GitHub Desktop.
Solid + Zustand for global state
import { onCleanup } from 'solid-js'
import { createStore, reconcile, Store } from 'solid-js/store'
import create, { SetState, State, StoreApi } from 'zustand/vanilla'
interface CounterStore {
count: number
increment: () => void
decrement: () => void
}
const counterStore = create<CounterStore>((set, get) => ({
count: 0,
increment() {
set({ count: get().count + 1 })
},
decrement() {
set({ count: get().count - 1 })
}
}))
export function createZustandStore<T extends State>(store: StoreApi<T>): [Store<T>, SetState<T>] {
const [state, setState] = createStore(store.getState());
const unsubscribe = store.subscribe((newState) => {
setState(reconcile(newState));
});
onCleanup(() => unsubscribe());
return [state, store.setState];
}
// const [state] = createZustandStore(counterStore)
// state.count
// state.increment()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment