Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement identifierPrefix option for useId #22855

Merged
merged 1 commit into from Dec 3, 2021

Conversation

acdlite
Copy link
Collaborator

@acdlite acdlite commented Dec 2, 2021

When an identifierPrefix option is given, React will add it to the beginning of ids generated by useId.

The main use case is to avoid conflicts when there are multiple React roots on a single page.

The server API already supported an identifierPrefix option. It's not only used by useId, but also for React-generated ids that are used to stitch together chunks of HTML, among other things. I added a corresponding option to the client.

You must pass the same prefix option to both the server and client. Eventually we may make this automatic by sending the prefix from the server as part of the HTML stream.

When an `identifierPrefix` option is given, React will add it to the
beginning of ids generated by `useId`.

The main use case is to avoid conflicts when there are multiple React
roots on a single page.

The server API already supported an `identifierPrefix` option. It's not
only used by `useId`, but also for React-generated ids that are used to
stitch together chunks of HTML, among other things. I added a
corresponding option to the client.

You must pass the same prefix option to both the server and client.
Eventually we may make this automatic by sending the prefix from the
server as part of the HTML stream.
@sizebot
Copy link

sizebot commented Dec 2, 2021

Comparing: a65ceef...4c72cee

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.min.js +0.20% 130.01 kB 130.27 kB +0.23% 41.57 kB 41.66 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.19% 134.77 kB 135.03 kB +0.21% 42.97 kB 43.06 kB
facebook-www/ReactDOM-prod.classic.js +0.27% 424.63 kB 425.76 kB +0.19% 78.24 kB 78.39 kB
facebook-www/ReactDOM-prod.modern.js +0.27% 413.19 kB 414.32 kB +0.19% 76.51 kB 76.65 kB
facebook-www/ReactDOMForked-prod.classic.js +0.27% 424.63 kB 425.76 kB +0.19% 78.25 kB 78.40 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-www/ReactDOMServer-prod.modern.js +0.94% 74.85 kB 75.56 kB +0.49% 16.09 kB 16.17 kB
oss-stable-semver/react-server/cjs/react-server.production.min.js +0.86% 19.49 kB 19.65 kB +0.63% 6.81 kB 6.86 kB
oss-stable/react-server/cjs/react-server.production.min.js +0.86% 19.49 kB 19.65 kB +0.63% 6.81 kB 6.86 kB
oss-experimental/react-server/cjs/react-server.production.min.js +0.85% 19.67 kB 19.83 kB +0.60% 6.87 kB 6.91 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.node.production.min.js +0.54% 35.55 kB 35.74 kB +0.29% 11.95 kB 11.99 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.node.production.min.js +0.54% 35.55 kB 35.74 kB +0.29% 11.95 kB 11.99 kB
oss-stable-semver/react-dom/cjs/react-dom-server.node.production.min.js +0.54% 35.71 kB 35.90 kB +0.33% 12.11 kB 12.15 kB
oss-stable/react-dom/cjs/react-dom-server.node.production.min.js +0.54% 35.71 kB 35.90 kB +0.33% 12.11 kB 12.15 kB
oss-experimental/react-dom/cjs/react-dom-server.node.production.min.js +0.54% 35.90 kB 36.09 kB +0.39% 12.18 kB 12.23 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.node.production.min.js +0.54% 35.74 kB 35.94 kB +0.27% 12.02 kB 12.05 kB
oss-stable-semver/react-dom/umd/react-dom-server-legacy.browser.production.min.js +0.35% 32.13 kB 32.24 kB +0.48% 10.84 kB 10.89 kB
oss-stable/react-dom/umd/react-dom-server-legacy.browser.production.min.js +0.35% 32.13 kB 32.24 kB +0.48% 10.84 kB 10.89 kB
oss-experimental/react-dom/umd/react-dom-server-legacy.browser.production.min.js +0.35% 32.27 kB 32.38 kB +0.42% 10.89 kB 10.94 kB
oss-stable-semver/react-dom/umd/react-dom-server.browser.production.min.js +0.35% 32.76 kB 32.88 kB +0.29% 11.27 kB 11.30 kB
oss-stable/react-dom/umd/react-dom-server.browser.production.min.js +0.35% 32.76 kB 32.88 kB +0.29% 11.27 kB 11.30 kB
oss-experimental/react-dom/umd/react-dom-server.browser.production.min.js +0.35% 32.90 kB 33.01 kB +0.28% 11.31 kB 11.34 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +0.34% 31.95 kB 32.06 kB +0.29% 10.72 kB 10.75 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +0.34% 31.95 kB 32.06 kB +0.29% 10.72 kB 10.75 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +0.34% 32.08 kB 32.19 kB +0.29% 10.77 kB 10.80 kB
oss-stable-semver/react-dom/cjs/react-dom-server.browser.production.min.js +0.34% 32.60 kB 32.71 kB +0.30% 11.15 kB 11.18 kB
oss-stable/react-dom/cjs/react-dom-server.browser.production.min.js +0.34% 32.60 kB 32.71 kB +0.30% 11.15 kB 11.18 kB
oss-experimental/react-dom/cjs/react-dom-server.browser.production.min.js +0.34% 32.74 kB 32.85 kB +0.27% 11.20 kB 11.23 kB
facebook-www/ReactDOMTesting-prod.modern.js +0.28% 406.93 kB 408.06 kB +0.20% 76.75 kB 76.90 kB
facebook-www/ReactDOM-prod.modern.js +0.27% 413.19 kB 414.32 kB +0.19% 76.51 kB 76.65 kB
facebook-www/ReactDOMForked-prod.modern.js +0.27% 413.19 kB 414.32 kB +0.19% 76.51 kB 76.66 kB
facebook-www/ReactDOMTesting-prod.classic.js +0.27% 420.24 kB 421.37 kB +0.19% 78.92 kB 79.07 kB
facebook-www/ReactDOM-prod.classic.js +0.27% 424.63 kB 425.76 kB +0.19% 78.24 kB 78.39 kB
facebook-www/ReactDOMForked-prod.classic.js +0.27% 424.63 kB 425.76 kB +0.19% 78.25 kB 78.40 kB
facebook-www/ReactDOM-profiling.modern.js +0.25% 445.02 kB 446.15 kB +0.19% 81.92 kB 82.08 kB
facebook-www/ReactDOMForked-profiling.modern.js +0.25% 445.02 kB 446.15 kB +0.19% 81.93 kB 82.08 kB
facebook-www/ReactDOM-profiling.classic.js +0.25% 456.51 kB 457.65 kB +0.19% 83.69 kB 83.85 kB
facebook-www/ReactDOMForked-profiling.classic.js +0.25% 456.51 kB 457.65 kB +0.19% 83.70 kB 83.85 kB
oss-stable-semver/react-dom/umd/react-dom-server-legacy.browser.development.js +0.23% 239.61 kB 240.16 kB +0.21% 56.08 kB 56.19 kB
oss-stable/react-dom/umd/react-dom-server-legacy.browser.development.js +0.23% 239.61 kB 240.16 kB +0.21% 56.08 kB 56.19 kB
oss-experimental/react-dom/umd/react-dom-server-legacy.browser.development.js +0.23% 240.17 kB 240.72 kB +0.20% 56.23 kB 56.34 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.23% 228.19 kB 228.72 kB +0.22% 55.48 kB 55.60 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.23% 228.19 kB 228.72 kB +0.22% 55.48 kB 55.60 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.23% 228.72 kB 229.25 kB +0.21% 55.63 kB 55.74 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.node.development.js +0.23% 229.80 kB 230.33 kB +0.22% 55.92 kB 56.04 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.node.development.js +0.23% 229.80 kB 230.33 kB +0.22% 55.92 kB 56.04 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.node.development.js +0.23% 230.33 kB 230.86 kB +0.21% 56.07 kB 56.19 kB
facebook-www/ReactDOMServer-dev.modern.js +0.22% 228.19 kB 228.69 kB +0.20% 54.69 kB 54.80 kB
oss-stable-semver/react-dom/umd/react-dom-server.browser.development.js +0.22% 237.08 kB 237.60 kB +0.20% 55.74 kB 55.85 kB
oss-stable/react-dom/umd/react-dom-server.browser.development.js +0.22% 237.08 kB 237.60 kB +0.20% 55.74 kB 55.85 kB
oss-experimental/react-dom/umd/react-dom-server.browser.development.js +0.22% 237.64 kB 238.15 kB +0.20% 55.89 kB 56.00 kB
oss-stable-semver/react-dom/cjs/react-dom-server.browser.development.js +0.22% 225.82 kB 226.31 kB +0.20% 55.16 kB 55.27 kB
oss-stable/react-dom/cjs/react-dom-server.browser.development.js +0.22% 225.82 kB 226.31 kB +0.20% 55.16 kB 55.27 kB
oss-stable-semver/react-dom/cjs/react-dom-server.node.development.js +0.22% 225.83 kB 226.32 kB +0.20% 55.04 kB 55.15 kB
oss-stable/react-dom/cjs/react-dom-server.node.development.js +0.22% 225.83 kB 226.32 kB +0.20% 55.04 kB 55.15 kB
oss-experimental/react-dom/cjs/react-dom-server.browser.development.js +0.22% 226.35 kB 226.83 kB +0.19% 55.31 kB 55.41 kB
oss-experimental/react-dom/cjs/react-dom-server.node.development.js +0.22% 226.36 kB 226.84 kB +0.19% 55.19 kB 55.29 kB
oss-stable-semver/react-dom/cjs/react-dom-testing.production.min.js +0.21% 124.48 kB 124.74 kB +0.24% 39.85 kB 39.94 kB
oss-stable/react-dom/cjs/react-dom-testing.production.min.js +0.21% 124.48 kB 124.74 kB +0.24% 39.85 kB 39.94 kB

Generated by 🚫 dangerJS against 4c72cee

@salazarm
Copy link
Contributor

salazarm commented Dec 2, 2021

Should we make the identifierPrefix nullable ?

@acdlite
Copy link
Collaborator Author

acdlite commented Dec 3, 2021

Should we make the identifierPrefix nullable?

We generally don't support nullable options, at least for newer APIs, though admittedly we're not always consistent about it. In this case I followed the precedent set by the other root option fields.

@acdlite acdlite merged commit 4729ff6 into facebook:main Dec 3, 2021
identifierPrefix: 'custom-prefix-',
});
});
expect(container).toMatchInlineSnapshot(`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh wow we can write assertions like this??

facebook-github-bot pushed a commit to facebook/react-native that referenced this pull request Dec 14, 2021
Summary:
This sync includes the following changes:
- **[f2a59df48](facebook/react@f2a59df48 )**: Remove unstableAvoidThisFallback from OSS ([#22884](facebook/react#22884)) //<salazarm>//
- **[24dd07bd2](facebook/react@24dd07bd2 )**: Add custom element property support behind a flag ([#22184](facebook/react#22184)) //<Joey Arhar>//
- **[72e48b8e1](facebook/react@72e48b8e1 )**: Fix: Don't skip writing updated package.json //<Andrew Clark>//
- **[e39b2c899](facebook/react@e39b2c899 )**: Fix peer deps for use-sync-external-store //<Andrew Clark>//
- **[ec78b135f](facebook/react@ec78b135f )**: Don't override use-sync-external-store peerDeps ([#22882](facebook/react#22882)) //<Andrew Clark>//
- **[5041c37d2](facebook/react@5041c37d2 )**: Remove hydrate option from createRoot ([#22878](facebook/react#22878)) //<salazarm>//
- **[3f9480f0f](facebook/react@3f9480f0f )**: enable continuous replay flag ([#22863](facebook/react#22863)) //<salazarm>//
- **[4729ff6d1](facebook/react@4729ff6d1 )**: Implement identifierPrefix option for useId ([#22855](facebook/react#22855)) //<Andrew Clark>//
- **[ed00d2c3d](facebook/react@ed00d2c3d )**: Remove unused flag ([#22854](facebook/react#22854)) //<Dan Abramov>//
- **[0cc724c77](facebook/react@0cc724c77 )**: update ReactFlightWebpackPlugin to be compatiable with webpack v5 ([#22739](facebook/react#22739)) //<Michelle Chen>//
- **[4e6eec69b](facebook/react@4e6eec69b )**: fix: document can be `null`, not just `undefined` ([#22695](facebook/react#22695)) //<Simen Bekkhus>//

Changelog:
[General][Changed] - React Native sync for revisions c1220eb...a049aa0

jest_e2e[run_all_tests]

Reviewed By: rickhanlonii

Differential Revision: D33062386

fbshipit-source-id: 37e497947efad5696c251096da8a92ccdc6dcea7
zhengjitf pushed a commit to zhengjitf/react that referenced this pull request Apr 15, 2022
When an `identifierPrefix` option is given, React will add it to the
beginning of ids generated by `useId`.

The main use case is to avoid conflicts when there are multiple React
roots on a single page.

The server API already supported an `identifierPrefix` option. It's not
only used by `useId`, but also for React-generated ids that are used to
stitch together chunks of HTML, among other things. I added a
corresponding option to the client.

You must pass the same prefix option to both the server and client.
Eventually we may make this automatic by sending the prefix from the
server as part of the HTML stream.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed React Core Team Opened by a member of the React Core Team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants