fix user refresher

This commit is contained in:
john 2025-05-19 17:52:18 +02:00
parent 17c9885ccc
commit 5f47162a50
6 changed files with 85 additions and 36 deletions

View file

@ -1,4 +1,4 @@
import { useEffect, useState } from 'react'
import { useCallback, useEffect, useState } from 'react'
export interface Store<T> {
getState: () => T
@ -37,7 +37,21 @@ export function createStore<T extends object | null>(initialState: T): Store<T>
export function useStore<T>(store: Store<T>) {
const [selectedState, setSelectedState] = useState(() => store.getState())
useEffect(() => store.subscribe((newState) => setSelectedState(newState)), [store])
useEffect(() => {
const unsubscribe = store.subscribe((newState) => setSelectedState(newState))
return [selectedState, setSelectedState] as const
return () => {
unsubscribe()
}
}, [store])
const setState = useCallback(
(nextState: T | ((prevState: T) => T)) => {
setSelectedState(nextState)
store.setState(nextState)
},
[store],
)
return [selectedState, setState] as const
}