fix user refresher
This commit is contained in:
parent
17c9885ccc
commit
5f47162a50
6 changed files with 85 additions and 36 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue