UNPKG

ez-observable

Version:

Make class fields reactive in React with a single decorator + hook

2 lines (1 loc) 527 B
import{useMemo as h,useRef as p,useSyncExternalStore as S}from"react";import{ObservableHelper as d}from"../internal/index.js";function O(s){const r=p(new Set);r.current.clear();const[f,o]=h(()=>{const c=d.for(s);let e=n(),i=a();function n(){return{...s,...c.getValues()}}function a(){return new Proxy(e,{get(b,t){return r.current.has(t)||(r.current.add(t),e=n()),e[t]}})}return[b=>c.subscribe((u,l)=>{r.current.has(u)&&(!(u in e)||!Object.is(e[u],l))&&(e=n(),i=a(),b())}),()=>i]},[s]);return S(f,o,o)}export{O as useObserved};