UNPKG

mini-react-dom

Version:

A lightweight React-like DOM renderer with JSX, hooks, context, SSR and lazy support

125 lines (93 loc) โ€ข 2.33 kB
# mini-react-dom A lightweight React-like DOM renderer with JSX, hooks, context, SSR, lazy loading, and minimal VDOM reconciliation. ## โœจ Features - โš›๏ธ Virtual DOM and JSX support - ๐Ÿง  `useState`, `useEffect`, `useMemo`, `useCallback` - ๐Ÿงฉ `createContext` and `useContext` - ๐Ÿ”„ Diffing & Reconciliation - ๐Ÿงต Hydration for SSR - ๐Ÿ“ฆ `lazy()` and `<Suspense>` support - ๐ŸŽฏ Minimal and easy to understand --- ## ๐Ÿ“ฆ Installation ```bash npm install mini-react-dom ``` --- ## ๐Ÿš€ Usage ```jsx /** @jsx createElement */ import { createElement, render, useState, useEffect, useMemo, useCallback, createContext, useContext, lazy, Suspense, } from "mini-react-dom"; const ThemeContext = createContext("light"); const LazyComponent = lazy(() => import("./HeavyComponent.js")); function App() { const [count, setCount] = useState(0); const theme = useContext(ThemeContext); const doubled = useMemo(() => count * 2, [count]); const handleClick = useCallback(() => console.log(count), [count]); useEffect(() => { console.log("Rendered or updated"); }, [count]); return ( <ThemeContext.Provider value="dark"> <h1>Hello</h1> <p>Count: {count}</p> <p>Doubled: {doubled}</p> <button onClick={() => setCount(count + 1)}>+1</button> <button onClick={handleClick}>Log</button> <Suspense fallback={<p>Loading...</p>}> <LazyComponent /> </Suspense> </ThemeContext.Provider> ); } render(<App />, document.getElementById("root")); ``` --- ## ๐Ÿงช Server-Side Rendering (SSR) ```js import { createElement } from "mini-react-dom"; import { renderToString } from "mini-react-dom"; import { App } from "./App.jsx"; const html = renderToString(<App />); ``` On the client: ```js import { hydrate } from "mini-react-dom"; hydrate(<App />, document.getElementById("root")); ``` --- ## ๐Ÿ“ File Structure ``` src/ โ”œโ”€โ”€ core/ โ”‚ โ”œโ”€โ”€ createElement.js โ”‚ โ”œโ”€โ”€ render.js โ”‚ โ”œโ”€โ”€ hooks.js โ”‚ โ”œโ”€โ”€ context.js โ”‚ โ”œโ”€โ”€ redux.js โ”‚ โ”œโ”€โ”€ renderToString.js โ”‚ โ”œโ”€โ”€ lazy.js โ”‚ โ””โ”€โ”€ suspense.js โ”œโ”€โ”€ index.js ``` --- ## ๐Ÿ›  Dev ```bash npm run dev # Start Vite npm run build # Bundle for publishing ``` --- ## ๐Ÿ“œ License MIT ยฉ Abuzcoder