Files
SnowLuma/.pnpm-store/v11/files/c2/8ceca640d0b6b5da3fcdb27b8ab71b977e532ccc60c102ebc2c30f4df97b732536fefe37e246c4c365e8c63e2210f192cab8c0ea865926ac0a840b75926fbf
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

51 lines
1.5 KiB
Plaintext

import { buildNode, renderNode } from "./render.js";
import { useState } from "../hooks/index.js";
//#region src/jsx/dom/client.ts
/**
* Create a root object for rendering
* @param element Render target
* @param options Options for createRoot (not supported yet)
* @returns Root object has `render` and `unmount` methods
*/
const createRoot = (element, options = {}) => {
let setJsxNode = void 0;
if (Object.keys(options).length > 0) console.warn("createRoot options are not supported yet");
return {
render(jsxNode) {
if (setJsxNode === null) throw new Error("Cannot update an unmounted root");
if (setJsxNode) setJsxNode(jsxNode);
else renderNode(buildNode({
tag: () => {
const [_jsxNode, _setJsxNode] = useState(jsxNode);
setJsxNode = _setJsxNode;
return _jsxNode;
},
props: {}
}), element);
},
unmount() {
setJsxNode?.(null);
setJsxNode = null;
}
};
};
/**
* Create a root object and hydrate app to the target element.
* In hono/jsx/dom, hydrate is equivalent to render.
* @param element Render target
* @param reactNode A JSXNode to render
* @param options Options for createRoot (not supported yet)
* @returns Root object has `render` and `unmount` methods
*/
const hydrateRoot = (element, reactNode, options = {}) => {
const root = createRoot(element, options);
root.render(reactNode);
return root;
};
var client_default = {
createRoot,
hydrateRoot
};
//#endregion
export { createRoot, client_default as default, hydrateRoot };