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

React Compatibility: Replace legacy ReactDOM.render method with createRoot. #38649

Merged
merged 11 commits into from
Aug 2, 2024

Conversation

coder-karen
Copy link
Contributor

@coder-karen coder-karen commented Jul 31, 2024

Fixes #38644

Proposed changes:

  • This PR changes ReactDOM.render usage to be via ReactDOM.createRoot, to ensure compatibility with React 19.
  • Additionally, in projects/packages/forms/src/dashboard/index.js there was an additional deprecated function being used - unescape. This has been replaced with decodeURIComponent.
  • Also, the frontend-management.js file is no longer imported anywhere - it used to be most recently in the Map block (removed here). However, the file may be used in the future based on this issue - Blocks: Convert blocks to use FrontendManagement #15838 - so I've left it with changes and presumably any hiccups when importing down the line will be able to be resolved then.

Other information:

  • Have you written new tests for your changes, if applicable?
  • Have you checked the E2E test CI results, and verified that your changes do not break them?
  • Have you tested your changes on WordPress.com, if applicable (if so, you'll see a generated comment below with a script to run)?

Jetpack product discussion

#38644

Does this pull request change what data or activity we track or use?

No.

Testing instructions:

In all the below examples, the following console warning should be gone with the branch checked out: Warning: ReactDOM.render is no longer supported in React 18. Use createRoot instead., and visible on trunk.

Testing on self-hosted / Atomic:

  • Forms:
    • On the feedback page at /wp-admin/edit.php?post_type=feedback, click 'View' in the top right, and select 'Inbox' to use the new Jetpack forms dashboard. This should enable and take you to /wp-admin/admin.php?page=jetpack-forms#/landing. The page should render as expected.
  • Search:
    • Add a Jetpack Search subscription to your test site, and enable Instant Search - /wp-admin/admin.php?page=jetpack#/performance. Navigate to Customberg (/wp-admin/admin.php?page=jetpack-search-configure). The page should render as expected.
    • On Atomic sites, in trunk you'll see two of the ReactDOM.render console errors - the one we're testing is related to jp-search-configure.js and this is the one that disappears. The other comes from widgets.wp.com, so will remain when this branch is checked out.
  • AI chat block:
    • Add a Jetpack AI Search block (you may need a Search plan). You don't need to ask a question, just add the block and save. Go to the post / page preview or published version, if published. The block should behave as expected. If you are testing on Atomic, you'll have to make sure the site is public or the block won't work properly.
  • Story block:
    • Add a Jetpack Story block to a post or page. Go to the post / page preview or published version, if published. The block should behave as expected.

Testing on Simple:

  • Follow the steps as above after following the steps in the generated comment below to apply the changes on your sandboxed site.
    • Script debug won't be enabled, so you won't see the console errors on trunk. In this case we're just testing the functionality.
    • When testing Search, you may need a paid plan (Business includes Instant Search). You can enable Instant Search at /wp-admin/admin.php?page=jetpack-search.
    • When testing AI chat, as with Atomic the site has to be public for this to work.

Copy link
Contributor

github-actions bot commented Jul 31, 2024

Are you an Automattician? Please test your changes on all WordPress.com environments to help mitigate accidental explosions.

  • To test on WoA, go to the Plugins menu on a WordPress.com Simple site. Click on the "Upload" button and follow the upgrade flow to be able to upload, install, and activate the Jetpack Beta plugin. Once the plugin is active, go to Jetpack > Jetpack Beta, select your plugin, and enable the update/react-19-compat-ReactDOM-render branch.

  • To test on Simple, run the following command on your sandbox:

    bin/jetpack-downloader test jetpack update/react-19-compat-ReactDOM-render
    

Interested in more tips and information?

  • In your local development environment, use the jetpack rsync command to sync your changes to a WoA dev blog.
  • Read more about our development workflow here: PCYsg-eg0-p2
  • Figure out when your changes will be shipped to customers here: PCYsg-eg5-p2

@github-actions github-actions bot added [Block] AI Chat [Block] Story [Feature] Contact Form [Package] Forms [Package] Search Contains core Search functionality for Jetpack and Search plugins [Plugin] Jetpack Issues about the Jetpack plugin. https://wordpress.org/plugins/jetpack/ labels Jul 31, 2024
Copy link
Contributor

Thank you for your PR!

When contributing to Jetpack, we have a few suggestions that can help us test and review your patch:

  • ✅ Include a description of your PR changes.
  • ✅ Add a "[Status]" label (In Progress, Needs Team Review, ...).
  • ✅ Add testing instructions.
  • ✅ Specify whether this PR includes any changes to data or privacy.
  • ✅ Add changelog entries to affected projects

This comment will be updated as you work on your PR and make changes. If you think that some of those checks are not needed for your PR, please explain why you think so. Thanks for cooperation 🤖


The e2e test report can be found here. Please note that it can take a few minutes after the e2e tests checks are complete for the report to be available.


Once your PR is ready for review, check one last time that all required checks appearing at the bottom of this PR are passing or skipped.
Then, add the "[Status] Needs Team Review" label and ask someone from your team review the code. Once reviewed, it can then be merged.
If you need an extra review from someone familiar with the codebase, you can update the labels from "[Status] Needs Team Review" to "[Status] Needs Review", and in that case Jetpack Approvers will do a final review of your PR.


Jetpack plugin:

The Jetpack plugin has different release cadences depending on the platform:

  • WordPress.com Simple releases happen daily.
  • WoA releases happen weekly.
  • Releases to self-hosted sites happen monthly. The next release is scheduled for August 6, 2024 (scheduled code freeze on August 5, 2024).

If you have any questions about the release process, please ask in the #jetpack-releases channel on Slack.

@coder-karen coder-karen marked this pull request as ready for review August 1, 2024 12:01
@coder-karen coder-karen requested a review from a team August 1, 2024 16:22
@coder-karen coder-karen added [Status] Needs Review To request a review from Crew. Label will be renamed soon. and removed [Status] In Progress labels Aug 1, 2024
Copy link
Contributor

@monsieur-z monsieur-z left a comment

Choose a reason for hiding this comment

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

The cde changes look good. I tested with a self-hosted site and everything worked as expected

@coder-karen coder-karen merged commit 9bbd5a7 into trunk Aug 2, 2024
59 checks passed
@coder-karen coder-karen deleted the update/react-19-compat-ReactDOM-render branch August 2, 2024 17:18
@github-actions github-actions bot removed the [Status] Needs Review To request a review from Crew. Label will be renamed soon. label Aug 2, 2024
@github-actions github-actions bot added this to the jetpack/13.7 milestone Aug 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] AI Chat [Block] Story [Feature] Contact Form [Package] Forms [Package] Search Contains core Search functionality for Jetpack and Search plugins [Plugin] Jetpack Issues about the Jetpack plugin. https://wordpress.org/plugins/jetpack/ [Type] Janitorial
Projects
None yet
Development

Successfully merging this pull request may close these issues.

React 19 Compatibility: use ReactDOM.createRoot instead of ReactDOM.render
2 participants