Published
Edited
Sep 16, 2021
2 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
render(
() => jsx`
<${Suspense} fallback=${jsx`<em>Waiting to compute the answer</em>`}>
<${DemoAnswer} />
<//>
`
)
Insert cell
DemoAnswer = component(() => jsx`<strong>${demoAnswerResource.read()}</strong>`)
Insert cell
Insert cell
Insert cell
render = (render, keyOrElement) =>
__SECRET_INTERNALS("elements", String(render), keyOrElement, {
init: (state) => {
// updated from original notebook. Rest of code is unchanged.
const element = DOM.element("div");
return {
renderer: () => state.render(state.public),
id: __SECRET_CREATE_ID(),
element,
// updated from original notebook. Rest of code is unchanged.
root: ReactDOM.createRoot(element),
public: {
useSetter: (setterOrValue, deps) =>
typeof setterOrValue === "function"
? useEffect(
() =>
state.public.setValue(
setterOrValue(state.public.getValue())
),
deps
)
: useEffect(() => state.public.setValue(setterOrValue), [
setterOrValue
]),
getValue: () => state.element.value,
setValue: (value) => {
state.element.value = value;
state.element.dispatchEvent(new CustomEvent("input"));
}
}
};
},
update: { render },
// updated from original notebook. Rest of code is unchanged.
effect: (state) => state.root.render(createElement(state.renderer)),
return: (state) => state.element
})
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
React
Insert cell
import {
// Notebook APIs
component,
memo,
forwardRef,
// Imports
jsx,
React,
ReactDOM,
// React
createElement,
Children,
createRef,
createContext,
lazy,
Fragment,
StrictMode,
Suspense,
cloneElement,
useCallback,
useContext,
useEffect,
useImperativeHandle,
useLayoutEffect,
useMemo,
useReducer,
useRef,
useState,
useDebugValue,
// React DOM
createPortal,
// private APIs
__SECRET_INTERNALS,
__SECRET_CREATE_ID,
__SECRET_DOC,
__SECRET_SWITCHER
} with { dev, versionRange } from '@j-f1/react'
Insert cell
Insert cell
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