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
Markdown
# 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