Upgrade Server Actions to canary (#27459)
Upgrades the stability of Server Actions from experimental to canary. - Turns on enableAsyncActions and enableFormActions - Removes "experimental_" prefix from useOptimistic, useFormStatus, and useFormState
Andrew Clark committed
Oct 4, 2023 at 14:51 UTC
bfefb228422f7264a29b3a6b98ec95e05925e80e
28 files changed
+40
-39
fixtures/flight-esm/src/Button.js
+1
-1
@@ -1,7 +1,7 @@
1
'use client';
2
3
import * as React from 'react';
4
-import {experimental_useFormStatus as useFormStatus} from 'react-dom';
4
+import {useFormStatus} from 'react-dom';
5
import ErrorBoundary from './ErrorBoundary.js';
6
7
const h = React.createElement;
fixtures/flight-esm/src/Form.js
+1
-1
@@ -1,7 +1,7 @@
1
'use client';
2
3
import * as React from 'react';
4
-import {experimental_useFormStatus as useFormStatus} from 'react-dom';
4
+import {useFormStatus} from 'react-dom';
5
import ErrorBoundary from './ErrorBoundary.js';
6
7
const h = React.createElement;
fixtures/flight/src/Button.js
+1
-1
@@ -1,7 +1,7 @@
1
'use client';
2
3
import * as React from 'react';
4
-import {experimental_useFormStatus as useFormStatus} from 'react-dom';
4
+import {useFormStatus} from 'react-dom';
5
import ErrorBoundary from './ErrorBoundary.js';
6
7
function ButtonDisabledWhilePending({action, children}) {
fixtures/flight/src/Counter.js
+1
-1
@@ -1,7 +1,7 @@
1
'use client';
2
3
import * as React from 'react';
4
-import {experimental_useFormState as useFormState} from 'react-dom';
4
+import {useFormState} from 'react-dom';
5
6
import Container from './Container.js';
7
fixtures/flight/src/Form.js
+1
-1
@@ -1,7 +1,7 @@
1
'use client';
2
3
import * as React from 'react';
4
-import {experimental_useFormStatus as useFormStatus} from 'react-dom';
4
+import {useFormStatus} from 'react-dom';
5
import ErrorBoundary from './ErrorBoundary.js';
6
7
function Status() {
packages/react-dom/index.classic.fb.js
+2
-2
@@ -31,8 +31,8 @@ export {
31
unstable_createEventHandle,
32
unstable_renderSubtreeIntoContainer,
33
unstable_runWithPriority, // DO NOT USE: Temporarily exposed to migrate off of Scheduler.runWithPriority.
34
- useFormStatus as experimental_useFormStatus,
35
- useFormState as experimental_useFormState,
34
+ useFormStatus,
35
+ useFormState,
36
prefetchDNS,
37
preconnect,
38
preload,
packages/react-dom/index.experimental.js
+2
-2
@@ -20,8 +20,8 @@ export {
20
unstable_batchedUpdates,
21
unstable_renderSubtreeIntoContainer,
22
unstable_runWithPriority, // DO NOT USE: Temporarily exposed to migrate off of Scheduler.runWithPriority.
23
- useFormStatus as experimental_useFormStatus,
24
- useFormState as experimental_useFormState,
23
+ useFormStatus,
24
+ useFormState,
25
prefetchDNS,
26
preconnect,
27
preload,
packages/react-dom/index.js
+2
-2
@@ -23,8 +23,8 @@ export {
23
unstable_createEventHandle,
24
unstable_renderSubtreeIntoContainer,
25
unstable_runWithPriority, // DO NOT USE: Temporarily exposed to migrate off of Scheduler.runWithPriority.
26
- useFormStatus as experimental_useFormStatus,
27
- useFormState as experimental_useFormState,
26
+ useFormStatus,
27
+ useFormState,
28
prefetchDNS,
29
preconnect,
30
preload,
packages/react-dom/index.modern.fb.js
+2
-2
@@ -16,8 +16,8 @@ export {
16
unstable_batchedUpdates,
17
unstable_createEventHandle,
18
unstable_runWithPriority, // DO NOT USE: Temporarily exposed to migrate off of Scheduler.runWithPriority.
19
- useFormStatus as experimental_useFormStatus,
20
- useFormState as experimental_useFormState,
19
+ useFormStatus,
20
+ useFormState,
21
prefetchDNS,
22
preconnect,
23
preload,
packages/react-dom/index.stable.js
+2
@@ -19,6 +19,8 @@ export {
19
unmountComponentAtNode,
20
unstable_batchedUpdates,
21
unstable_renderSubtreeIntoContainer,
22
+ useFormStatus,
23
+ useFormState,
24
prefetchDNS,
25
preconnect,
26
preload,
packages/react-dom/server-rendering-stub.js
+2
-2
@@ -24,7 +24,7 @@ export {
24
preloadModule,
25
preinit,
26
preinitModule,
27
- experimental_useFormStatus,
28
- experimental_useFormState,
27
+ useFormStatus,
28
+ useFormState,
29
unstable_batchedUpdates,
30
} from './src/server/ReactDOMServerRenderingStub';
packages/react-dom/src/__tests__/ReactDOMFizzForm-test.js
+3
-3
@@ -31,9 +31,9 @@ describe('ReactDOMFizzForm', () => {
31
React = require('react');
32
ReactDOMServer = require('react-dom/server.browser');
33
ReactDOMClient = require('react-dom/client');
34
- useFormStatus = require('react-dom').experimental_useFormStatus;
35
- useFormState = require('react-dom').experimental_useFormState;
36
- useOptimistic = require('react').experimental_useOptimistic;
34
+ useFormStatus = require('react-dom').useFormStatus;
35
+ useFormState = require('react-dom').useFormState;
36
+ useOptimistic = require('react').useOptimistic;
37
act = require('internal-test-utils').act;
38
container = document.createElement('div');
39
document.body.appendChild(container);
packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
+1
-1
@@ -89,7 +89,7 @@ describe('ReactDOMFizzServer', () => {
89
if (gate(flags => flags.enableSuspenseList)) {
90
SuspenseList = React.unstable_SuspenseList;
91
}
92
- useFormState = ReactDOM.experimental_useFormState;
92
+ useFormState = ReactDOM.useFormState;
93
94
PropTypes = require('prop-types');
95
packages/react-dom/src/__tests__/ReactDOMForm-test.js
+2
-2
@@ -55,8 +55,8 @@ describe('ReactDOMForm', () => {
55
useState = React.useState;
56
Suspense = React.Suspense;
57
startTransition = React.startTransition;
58
- useFormStatus = ReactDOM.experimental_useFormStatus;
59
- useFormState = ReactDOM.experimental_useFormState;
58
+ useFormStatus = ReactDOM.useFormStatus;
59
+ useFormState = ReactDOM.useFormState;
60
container = document.createElement('div');
61
document.body.appendChild(container);
62
packages/react-dom/src/__tests__/react-dom-server-rendering-stub-test.js
+2
-2
@@ -85,9 +85,9 @@ describe('react-dom-server-rendering-stub', () => {
85
86
// @gate enableFormActions
87
// @gate enableAsyncActions
88
- it('exports experimental_useFormStatus', async () => {
88
+ it('exports useFormStatus', async () => {
89
function App() {
90
- const {pending} = ReactDOM.experimental_useFormStatus();
90
+ const {pending} = ReactDOM.useFormStatus();
91
return 'Pending: ' + pending;
92
}
93
packages/react-dom/src/server/ReactDOMServerRenderingStub.js
+2
-2
@@ -16,8 +16,8 @@ export {
16
prefetchDNS,
17
} from '../shared/ReactDOMFloat';
18
export {
19
- useFormStatus as experimental_useFormStatus,
20
- useFormState as experimental_useFormState,
19
+ useFormStatus,
20
+ useFormState,
21
} from 'react-dom-bindings/src/shared/ReactDOMFormActions';
22
23
export function createPortal() {
packages/react-reconciler/src/__tests__/ReactAsyncActions-test.js
+1
-1
@@ -19,7 +19,7 @@ describe('ReactAsyncActions', () => {
19
assertLog = require('internal-test-utils').assertLog;
20
useTransition = React.useTransition;
21
useState = React.useState;
22
- useOptimistic = React.experimental_useOptimistic;
22
+ useOptimistic = React.useOptimistic;
23
24
textCache = new Map();
25
});
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMForm-test.js
+1
-1
@@ -55,7 +55,7 @@ describe('ReactFlightDOMForm', () => {
55
ReactDOMServer = require('react-dom/server.edge');
56
ReactDOMClient = require('react-dom/client');
57
act = require('react-dom/test-utils').act;
58
- useFormState = require('react-dom').experimental_useFormState;
58
+ useFormState = require('react-dom').useFormState;
59
container = document.createElement('div');
60
document.body.appendChild(container);
61
});
packages/react/index.classic.fb.js
+1
-1
@@ -52,7 +52,7 @@ export {
52
useLayoutEffect,
53
useInsertionEffect,
54
useMemo,
55
- experimental_useOptimistic,
55
+ useOptimistic,
56
useReducer,
57
useRef,
58
useState,
packages/react/index.experimental.js
+1
-1
@@ -50,7 +50,7 @@ export {
50
useInsertionEffect,
51
useLayoutEffect,
52
useMemo,
53
- experimental_useOptimistic,
53
+ useOptimistic,
54
useReducer,
55
useRef,
56
useState,
packages/react/index.js
+1
-1
@@ -75,7 +75,7 @@ export {
75
useInsertionEffect,
76
useLayoutEffect,
77
useMemo,
78
- experimental_useOptimistic,
78
+ useOptimistic,
79
useSyncExternalStore,
80
useReducer,
81
useRef,
packages/react/index.modern.fb.js
+1
-1
@@ -50,7 +50,7 @@ export {
50
useInsertionEffect,
51
useLayoutEffect,
52
useMemo,
53
- experimental_useOptimistic,
53
+ useOptimistic,
54
useReducer,
55
useRef,
56
useState,
packages/react/index.stable.js
+1
@@ -42,6 +42,7 @@ export {
42
useLayoutEffect,
43
useMemo,
44
useReducer,
45
+ useOptimistic,
46
useRef,
47
useState,
48
useSyncExternalStore,
packages/react/src/React.js
+1
-1
@@ -111,7 +111,7 @@ export {
111
useInsertionEffect,
112
useLayoutEffect,
113
useMemo,
114
- useOptimistic as experimental_useOptimistic,
114
+ useOptimistic,
115
useSyncExternalStore,
116
useReducer,
117
useRef,
packages/shared/ReactFeatureFlags.js
+2
-4
@@ -31,6 +31,8 @@ export const enableComponentStackLocations = true;
31
32
// TODO: Finish rolling out in www
33
export const enableClientRenderFallbackOnTextMismatch = true;
34
+export const enableFormActions = true;
35
+export const enableAsyncActions = true;
36
37
// Not sure if www still uses this. We don't have a replacement but whatever we
38
// replace it with will likely be different than what's already there, so we
@@ -82,8 +84,6 @@ export const enableLegacyCache = __EXPERIMENTAL__;
84
export const enableCacheElement = __EXPERIMENTAL__;
85
export const enableFetchInstrumentation = true;
86
85
-export const enableFormActions = __EXPERIMENTAL__;
86
-
87
export const enableBinaryFlight = __EXPERIMENTAL__;
88
89
export const enableTaint = __EXPERIMENTAL__;
@@ -120,8 +120,6 @@ export const enableUseEffectEventHook = __EXPERIMENTAL__;
120
// (handled with an MutationObserver) instead of inline-scripts
121
export const enableFizzExternalRuntime = true;
122
123
-export const enableAsyncActions = __EXPERIMENTAL__;
124
-
123
export const alwaysThrottleRetries = true;
124
125
export const useMicrotasksForSchedulingInFabric = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1
-1
@@ -74,7 +74,7 @@ export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
74
export const enableFizzExternalRuntime = false;
75
export const enableDeferRootSchedulingToMicrotask = true;
76
77
-export const enableAsyncActions = false;
77
+export const enableAsyncActions = true;
78
79
export const alwaysThrottleRetries = true;
80
packages/shared/forks/ReactFeatureFlags.test-renderer.native.js
+1
-1
@@ -71,7 +71,7 @@ export const useModernStrictMode = false;
71
export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
72
export const enableDeferRootSchedulingToMicrotask = true;
73
74
-export const enableAsyncActions = false;
74
+export const enableAsyncActions = true;
75
76
export const alwaysThrottleRetries = true;
77
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+1
-1
@@ -74,7 +74,7 @@ export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
74
export const enableFizzExternalRuntime = false;
75
export const enableDeferRootSchedulingToMicrotask = true;
76
77
-export const enableAsyncActions = false;
77
+export const enableAsyncActions = true;
78
79
export const alwaysThrottleRetries = true;
80