JSFiddle - React, Tailwind, and code Playground
by Rudolf Mankevich
JavaScript
const ASYNC_INIT = true;
let rerender;
function run(render) {
rerender = render;
render()
}
let instance;
function useValue(init) {
if (instance) {
return [instance.ref.current, instance.set];
}
let ref = { current: undefined };
if (ASYNC_INIT) {
queueMicrotask(() => set(init()));
} else {
set(init());
}
function set(next) {
ref.current = next;
rerender();
}
instance = { ref, set };
return [ref.current, set];
}
run(() => {
const [value] = useValue(() => x)
let x = 1;
console.log(value);
});