React nil
⃝ A react null renderer
Quite so. This package allows you to bring React's high-level component abstraction to Node or wherever you need it. Why not manage your REST endpoints like routes on the client, users as components with mount/unmount lifecycles, self-contained separation of concern, and clean side effects? Suspense for requests, etc. The project is written primarily in TypeScript, distributed under the MIT License license, first published in 2020. Key topics include: fiber, node, null, react, renderer.
Nothing to see here ...
Quite so. This package allows you to bring React's high-level component abstraction to Node or wherever you need it. Why not manage your REST endpoints like routes on the client, users as components with mount/unmount lifecycles, self-contained separation of concern, and clean side effects? Suspense for requests, etc.
You can try a small demo here: https://codesandbox.io/s/react-nil-mvpry
How does it work?
The following renders a logical component without a view, it renders nothing, but it has a real lifecycle and is managed by React regardless.
jsximport { useState, useEffect } from 'react' import { render } from 'react-nil' function Foo() { const [active, set] = useState(false) useEffect(() => void setInterval(() => set((a) => !a), 1000), []) // false, true, ... console.log(active) } render(<Foo />)
We can take this further by rendering made-up elements that get returned as a reactive JSON tree from render.
You can take a snapshot for testing via React.act which will wait for effects and suspense to finish.
tsximport { useState, useEffect, act } from 'react' import { render } from 'react-nil' declare module 'react' { namespace JSX { interface IntrinsicElements { timestamp: Record<string, unknown> } } } function Test() { const [value, setValue] = useState(-1) useEffect(() => setValue(Date.now()), []) return <timestamp value={value} /> } const container = await act(async () => render(<Test />)) // { type: 'timestamp', props: { value: number }, children: [] } console.log(container.head)
Contributors
Showing top 4 contributors by commit count.
