UNPKG

react-use-current

Version:

A lightweight React hook for reactive state management.

2 lines (1 loc) 891 B
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("vref");const t=Symbol.for("@react-use-current/tracks"),a=globalThis;a[t]?a[t]instanceof WeakMap||(console.warn("[useCurrent] Global Tracks key is already used by another library or code, overriding."),a[t]=new WeakMap):a[t]=new WeakMap;const n=a[t];function o(e,t,a=new Set){const n=r.getRaw(e);return t.get(n)?.forEach(e=>{a.add(e),o(e,t,a)}),a}function s(){return Symbol(`useCurrent @${(new Date).toISOString()}`)}exports.default=function(t){const[,a]=e.useState(Symbol()),c=e.useRef(new WeakMap),u=e.useRef(new WeakMap),i=e.useMemo(()=>r(t,e=>{const r=e.target,t=o(r,u.current);t.add(i),t.add(r),t.forEach(e=>{n.has(e)&&n.set(e,s())}),a(Symbol())},{cache:c.current,cacheParents:u.current}),[]);return i},exports.track=function(e){return r.isRef(e)?(n.has(e)||n.set(e,s()),n.get(e)):e};