@runicjs/runic-react
Version:
Tools for working with Runic in React
19 lines (18 loc) • 652 B
JavaScript
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;
}