Public
Edited
Dec 7
Fork of React
1 fork
Importers
4 stars
Insert cell
Insert cell
function render(Component, props = {}) {
let entry = cache.get(Component);
if (!entry) {
const element = document.createElement("div");
const root = createRoot(element);
root.render(createElement(Wrapper, { Component, props, element }));
mutable cache.set(Component, { element, root });
return element;
} else {
const { element, root } = entry;
root.render(createElement(Wrapper, { Component, props, element }));
return element;
}
}
Insert cell
Insert cell
ElementContext = createContext(null)
Insert cell
function Wrapper({ Component, props, element }) {
useEffect(() => {
if (element.value !== undefined) {
element.dispatchEvent(new CustomEvent("input"));
}
}, [element]);
return createElement(ElementContext, { value: element }, [
createElement(Component, props)
]);
}
Insert cell
Insert cell
function useObservableState(initialValue) {
const [state, setState] = useState(initialValue);
const element = useContext(ElementContext);
element.value = state;
const signature = `${Math.random().toString(16).slice(2)}`;
const interceptedSetState = (newValue) => {
setState(newValue);
if (element) {
element.value = newValue;
// element.value = { ...element.value, [signature]: newValue };
element.dispatchEvent(new CustomEvent("input"));
}
};
return [state, interceptedSetState];
}
Insert cell
Insert cell
mutable cache = new WeakMap()
Insert cell
Insert cell
import {
React,
ReactDOM,
useEffect,
useState,
useContext,
useRef,
useMemo,
useCallback,
useImperativeHandle,
useReducer,
useId,
useTransition,
Fragment,
memo,
lazy,
forwardRef,
startTransition,
createContext,
Suspense,
createFactory,
createElement,
createRoot,
createPortal,
jsx
} from "@gnestor/react-19"
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more