UNPKG

@runicjs/runic-react

Version:

Tools for working with Runic in React

19 lines (18 loc) 652 B
import { useEffect, useState } from 'react'; import { defaultEqualityFn } from '../utils'; export default function useStore(store, // It's unfortunate that I have to resort to casting here. selector = (v) => v, equalityFn = defaultEqualityFn) { const [value, setValue] = useState(selector(store.getState())); useEffect(() => { return store.subscribe((state) => { setValue((last) => { const next = selector(state); if (equalityFn(last, next)) return last; return next; }); }); }, [store, selector, equalityFn]); return value; }