react-use-current
Version:
A lightweight React hook for reactive state management.
2 lines (1 loc) • 844 B
JavaScript
import{useState as e,useRef as r,useMemo as t}from"react";import n,{getRaw as a,isRef as o}from"vref";const c=Symbol.for("@react-use-current/tracks"),s=globalThis;s[c]?s[c]instanceof WeakMap||(console.warn("[useCurrent] Global Tracks key is already used by another library or code, overriding."),s[c]=new WeakMap):s[c]=new WeakMap;const u=s[c];function i(e,r,t=new Set){const n=a(e);return r.get(n)?.forEach(e=>{t.add(e),i(e,r,t)}),t}function f(){return Symbol(`useCurrent @${(new Date).toISOString()}`)}function l(a){const[,o]=e(Symbol()),c=r(new WeakMap),s=r(new WeakMap),l=t(()=>n(a,e=>{const r=e.target,t=i(r,s.current);t.add(l),t.add(r),t.forEach(e=>{u.has(e)&&u.set(e,f())}),o(Symbol())},{cache:c.current,cacheParents:s.current}),[]);return l}function d(e){return o(e)?(u.has(e)||u.set(e,f()),u.get(e)):e}export{l as default,d as track};