UNPKG

nests

Version:

Fast and easy state storage with a lot of control.

30 lines (29 loc) 1.05 kB
// Import default from React or CRA fails. // Why isn't CRA being updated to modern technologies if it's recommended officially. import { useRef, useReducer, useEffect } from "react"; import Events from "../Events"; export default function useNest(nest, transient = false, filter = () => true) { // Keep this here for React devtools. // @ts-ignore const value = useRef(nest.ghost); const [, forceUpdate] = useReducer((n) => ~n, 0); useEffect(() => { function listener(event, data) { if (filter(event, data)) forceUpdate(); } nest.on(Events.UPDATE, listener); if (!transient) { nest.on(Events.SET, listener); nest.on(Events.DELETE, listener); } return () => { nest.off(Events.UPDATE, listener); if (!transient) { nest.off(Events.SET, listener); nest.off(Events.DELETE, listener); } }; }, []); return nest.ghost; }