Last active
July 19, 2022 10:09
-
-
Save Junglecrew/e783042ec5c7c27d2c713b91e8d92439 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// mobx: 6.3.3 | |
// React 16.8+ | |
interface IStore { | |
name: string; | |
} | |
export const useSelector = <T>( | |
selector: () => T, | |
deps: DependencyList = [] | |
): T => { | |
const [selected, setSelected] = useState(selector); | |
// eslint-disable-next-line react-hooks/exhaustive-deps | |
useEffect(() => autorun(() => setSelected(selector())), deps); | |
return selected; | |
}; | |
const store = observable.object({ | |
name: '', | |
}); | |
export const updateStore = (newValues) => { | |
runInAction(() => { | |
Object.assign(store, newValues); | |
}); | |
}; | |
export const useStore = () => useSelector(() => ({ ...store })); | |
export const useStoreName = () => useSelector(() => store.name); | |
export const useStoreValue = <T extends keyof IStore>(key: T): IStore[T] => | |
useSelector(() => store[key]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment