1- import { EMPTY_OBJ } from './constants' ;
1+ import { EMPTY_OBJ , MODE_HYDRATE } from './constants' ;
22import { commitRoot , diff } from './diff/index' ;
33import { createElement , Fragment } from './create-element' ;
44import options from './options' ;
@@ -8,21 +8,17 @@ import { slice } from './util';
88 * Render a Preact virtual node into a DOM element
99 * @param {import('./internal').ComponentChild } vnode The virtual node to render
1010 * @param {import('./internal').PreactElement } parentDom The DOM element to render into
11- * @param {import('./internal').PreactElement | object } [replaceNode] Optional: Attempt to re-use an
12- * existing DOM tree rooted at `replaceNode`
1311 */
14- export function render ( vnode , parentDom , replaceNode ) {
12+ export function render ( vnode , parentDom ) {
1513 // https://github.com/preactjs/preact/issues/3794
1614 if ( parentDom == document ) {
1715 parentDom = document . documentElement ;
1816 }
1917
2018 if ( options . _root ) options . _root ( vnode , parentDom ) ;
2119
22- // We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in
23- // hydration mode or not by passing the `hydrate` function instead of a DOM
24- // element..
25- let isHydrating = replaceNode === hydrate ;
20+ // @ts -expect-error
21+ let isHydrating = ! ! ( vnode && vnode . _flags & MODE_HYDRATE ) ;
2622
2723 // To be able to support calling `render()` multiple times on the same
2824 // DOM node, we need to obtain a reference to the previous tree. We do
@@ -65,5 +61,7 @@ export function render(vnode, parentDom, replaceNode) {
6561 * @param {import('./internal').PreactElement } parentDom The DOM element to update
6662 */
6763export function hydrate ( vnode , parentDom ) {
68- render ( vnode , parentDom , hydrate ) ;
64+ // @ts -expect-error
65+ vnode . _flags |= MODE_HYDRATE ;
66+ render ( vnode , parentDom ) ;
6967}
0 commit comments