Skip to content

Commit

Permalink
[rcr] Re-export useMemoCache in top level React namespace (#31139)
Browse files Browse the repository at this point in the history
In order to support using the compiler on versions of React prior to 19,
we need the ability to statically import `c` (aka useMemoCache) or
fallback to a polyfill supplied by `react-compiler-runtime` (note: this
is a separate npm package, not to be confused with
`react/compiler-runtime`, which is currently a part of react).

To do this we first need to re-export `useMemoCache` under the top level
React namespace again, which is additive and thus non-breaking. Doing so
allows `react-compiler-runtime` to statically either re-export
`React.__COMPILER_RUNTIME.c` or supply a polyfill, without the need for
a dynamic import which is finicky to support due to returning a promise.

In later PRs I will remove `react/compiler-runtime` and update the
compiler to emit imports to `react-compiler-runtime` instead.
  • Loading branch information
poteto authored Oct 7, 2024
1 parent 68d59d4 commit b78a7f2
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions packages/react/index.development.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export type ChildrenArray<+T> = $ReadOnlyArray<ChildrenArray<T>> | T;
// We can't use export * from in Flow for some reason.
export {
__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
__COMPILER_RUNTIME,
Children,
Component,
Fragment,
Expand Down
1 change: 1 addition & 0 deletions packages/react/index.experimental.development.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

export {
__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
__COMPILER_RUNTIME,
Children,
Component,
Fragment,
Expand Down
1 change: 1 addition & 0 deletions packages/react/index.experimental.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

export {
__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
__COMPILER_RUNTIME,
Children,
Component,
Fragment,
Expand Down
1 change: 1 addition & 0 deletions packages/react/index.fb.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

export {
__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
__COMPILER_RUNTIME,
act,
cache,
Children,
Expand Down
1 change: 1 addition & 0 deletions packages/react/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export type ChildrenArray<+T> = $ReadOnlyArray<ChildrenArray<T>> | T;
// We can't use export * from in Flow for some reason.
export {
__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
__COMPILER_RUNTIME,
Children,
Component,
Fragment,
Expand Down
2 changes: 2 additions & 0 deletions packages/react/src/ReactClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import ReactSharedInternals from './ReactSharedInternalsClient';
import {startTransition} from './ReactStartTransition';
import {act} from './ReactAct';
import {captureOwnerStack} from './ReactOwnerStack';
import ReactCompilerRuntime from './ReactCompilerRuntime';

const Children = {
map,
Expand Down Expand Up @@ -109,6 +110,7 @@ export {
isValidElement,
ReactVersion as version,
ReactSharedInternals as __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
ReactCompilerRuntime as __COMPILER_RUNTIME,
// Concurrent Mode
useTransition,
startTransition,
Expand Down
14 changes: 14 additions & 0 deletions packages/react/src/ReactCompilerRuntime.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/

import {useMemoCache} from './ReactHooks';

export default {
c: useMemoCache,
};

0 comments on commit b78a7f2

Please sign in to comment.