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 |
|
31 | import React = require('react');
|
32 | import ReactDOM = require('.');
|
33 |
|
34 | export {};
|
35 |
|
36 | declare 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 | }
|