UNPKG

3.43 kBTypeScriptView Raw
1/**
2 * These are types for things that are present in the `experimental` builds of React but not yet
3 * on a stable build.
4 *
5 * Once they are promoted to stable they can just be moved to the main index file.
6 *
7 * To load the types declared here in an actual project, there are three ways. The easiest one,
8 * if your `tsconfig.json` already has a `"types"` array in the `"compilerOptions"` section,
9 * is to add `"react-dom/experimental"` to the `"types"` array.
10 *
11 * Alternatively, a specific import syntax can to be used from a typescript file.
12 * This module does not exist in reality, which is why the {} is important:
13 *
14 * ```ts
15 * import {} from 'react-dom/experimental'
16 * ```
17 *
18 * It is also possible to include it through a triple-slash reference:
19 *
20 * ```ts
21 * /// <reference types="react-dom/experimental" />
22 * ```
23 *
24 * Either the import or the reference only needs to appear once, anywhere in the project.
25 */
26
27// See https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOM.js to see how the exports are declared,
28// and https://github.com/facebook/react/blob/master/packages/shared/ReactFeatureFlags.js to verify which APIs are
29// flagged experimental or not. Experimental APIs will be tagged with `__EXPERIMENTAL__`.
30
31import React = require('react');
32import ReactDOM = require('.');
33
34export {};
35
36declare module '.' {
37 // enableSuspenseServerRenderer feature
38 interface HydrationOptions {
39 onHydrated?(suspenseInstance: Comment): void;
40 onDeleted?(suspenseInstance: Comment): void;
41 }
42
43 // exposeConcurrentModeAPIs features
44
45 interface RootOptions {
46 hydrate?: boolean;
47 hydrationOptions?: HydrationOptions;
48 }
49
50 interface Root {
51 render(children: React.ReactChild | React.ReactNodeArray, callback?: () => void): void;
52 unmount(callback?: () => void): void;
53 }
54
55 /**
56 * Replaces `ReactDOM.render` when the `.render` method is called and enables Blocking Mode.
57 *
58 * Opting into Concurrent Mode introduces semantic changes to how React works.
59 * This means that you can’t use Concurrent Mode in just a few components.
60 * Because of this, some apps may not be able to migrate directly to Concurrent Mode.
61 * Blocking Mode only contains a small subset of Concurrent Mode features and is intended
62 * as an intermediary migration step for apps that are unable to migrate directly.
63 *
64 * @see https://reactjs.org/docs/concurrent-mode-adoption.html#migration-step-blocking-mode
65 * @see https://reactjs.org/docs/concurrent-mode-reference.html#createblockingroot
66 */
67 function unstable_createBlockingRoot(
68 container: Element | Document | DocumentFragment | Comment,
69 options?: RootOptions,
70 ): Root;
71
72 /**
73 * Replaces `ReactDOM.render` when the `.render` method is called and enables Concurrent Mode.
74 *
75 * @see https://reactjs.org/docs/concurrent-mode-reference.html#createroot
76 */
77 function unstable_createRoot(container: Element | Document | DocumentFragment | Comment, options?: RootOptions): Root;
78
79 function unstable_flushControlled(callback: () => void): void;
80
81 // enableSelectiveHydration feature
82
83 /**
84 * @see https://github.com/facebook/react/commit/3a2b5f148d450c69aab67f055fc441d294c23518
85 */
86 function unstable_scheduleHydration(target: Element | Document | DocumentFragment | Comment): void;
87}