mirror of
https://github.com/facebook/react.git
synced 2026-02-25 21:24:59 +00:00
The internal Container type represents the types of containers that React can support in its internals that deal with containers. This didn't include DocumentFragment which we support specifically for rendering into shadow roots. However, not all types makes sense to pass into the createRoot API. One of those is comment nodes that is deprecated and we don't really fully support. It really only exists for FB legacy. For createRoot it doesn't make sense to pass a Document since that will try to empty the document which removes the HTML tag which doesn't work. Documents can only be passed to hydrateRoot. Conversely I'm not sure we actually support hydrating a shadow root properly so I excluded DocumentFragment from hydrateRoot.
57 lines
1.2 KiB
JavaScript
57 lines
1.2 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
import type {ReactNodeList} from 'shared/ReactTypes';
|
|
import type {
|
|
RootType,
|
|
HydrateRootOptions,
|
|
CreateRootOptions,
|
|
} from './src/client/ReactDOMRoot';
|
|
|
|
import {
|
|
createRoot as createRootImpl,
|
|
hydrateRoot as hydrateRootImpl,
|
|
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as Internals,
|
|
} from './';
|
|
|
|
export function createRoot(
|
|
container: Element | DocumentFragment,
|
|
options?: CreateRootOptions,
|
|
): RootType {
|
|
if (__DEV__) {
|
|
Internals.usingClientEntryPoint = true;
|
|
}
|
|
try {
|
|
return createRootImpl(container, options);
|
|
} finally {
|
|
if (__DEV__) {
|
|
Internals.usingClientEntryPoint = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
export function hydrateRoot(
|
|
container: Document | Element,
|
|
children: ReactNodeList,
|
|
options?: HydrateRootOptions,
|
|
): RootType {
|
|
if (__DEV__) {
|
|
Internals.usingClientEntryPoint = true;
|
|
}
|
|
try {
|
|
return hydrateRootImpl(container, children, options);
|
|
} finally {
|
|
if (__DEV__) {
|
|
Internals.usingClientEntryPoint = false;
|
|
}
|
|
}
|
|
}
|