Commit updated Javascript packages
This commit is contained in:
68
build/javascript/node_modules/preact/src/render.js
generated
vendored
Normal file
68
build/javascript/node_modules/preact/src/render.js
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
import { EMPTY_OBJ, EMPTY_ARR } from './constants';
|
||||
import { commitRoot, diff } from './diff/index';
|
||||
import { createElement, Fragment } from './create-element';
|
||||
import options from './options';
|
||||
|
||||
const IS_HYDRATE = EMPTY_OBJ;
|
||||
|
||||
/**
|
||||
* Render a Preact virtual node into a DOM element
|
||||
* @param {import('./index').ComponentChild} vnode The virtual node to render
|
||||
* @param {import('./internal').PreactElement} parentDom The DOM element to
|
||||
* render into
|
||||
* @param {Element | Text} [replaceNode] Optional: Attempt to re-use an
|
||||
* existing DOM tree rooted at `replaceNode`
|
||||
*/
|
||||
export function render(vnode, parentDom, replaceNode) {
|
||||
if (options._root) options._root(vnode, parentDom);
|
||||
|
||||
// We abuse the `replaceNode` parameter in `hydrate()` to signal if we
|
||||
// are in hydration mode or not by passing `IS_HYDRATE` instead of a
|
||||
// DOM element.
|
||||
let isHydrating = replaceNode === IS_HYDRATE;
|
||||
|
||||
// To be able to support calling `render()` multiple times on the same
|
||||
// DOM node, we need to obtain a reference to the previous tree. We do
|
||||
// this by assigning a new `_children` property to DOM nodes which points
|
||||
// to the last rendered tree. By default this property is not present, which
|
||||
// means that we are mounting a new tree for the first time.
|
||||
let oldVNode = isHydrating
|
||||
? null
|
||||
: (replaceNode && replaceNode._children) || parentDom._children;
|
||||
vnode = createElement(Fragment, null, [vnode]);
|
||||
|
||||
// List of effects that need to be called after diffing.
|
||||
let commitQueue = [];
|
||||
diff(
|
||||
parentDom,
|
||||
// Determine the new vnode tree and store it on the DOM element on
|
||||
// our custom `_children` property.
|
||||
((isHydrating ? parentDom : replaceNode || parentDom)._children = vnode),
|
||||
oldVNode || EMPTY_OBJ,
|
||||
EMPTY_OBJ,
|
||||
parentDom.ownerSVGElement !== undefined,
|
||||
replaceNode && !isHydrating
|
||||
? [replaceNode]
|
||||
: oldVNode
|
||||
? null
|
||||
: parentDom.childNodes.length
|
||||
? EMPTY_ARR.slice.call(parentDom.childNodes)
|
||||
: null,
|
||||
commitQueue,
|
||||
replaceNode || EMPTY_OBJ,
|
||||
isHydrating
|
||||
);
|
||||
|
||||
// Flush all queued effects
|
||||
commitRoot(commitQueue, vnode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing DOM element with data from a Preact virtual node
|
||||
* @param {import('./index').ComponentChild} vnode The virtual node to render
|
||||
* @param {import('./internal').PreactElement} parentDom The DOM element to
|
||||
* update
|
||||
*/
|
||||
export function hydrate(vnode, parentDom) {
|
||||
render(vnode, parentDom, IS_HYDRATE);
|
||||
}
|
||||
Reference in New Issue
Block a user