From 71050d527d97494e876a7efe7d6f001e1f288d23 Mon Sep 17 00:00:00 2001 From: Sophie Alpert Date: Mon, 21 Oct 2019 22:36:06 -0700 Subject: [PATCH 01/37] Update code-splitting.md --- content/docs/code-splitting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/code-splitting.md b/content/docs/code-splitting.md index 9d1101cdc..d6a9e9be2 100644 --- a/content/docs/code-splitting.md +++ b/content/docs/code-splitting.md @@ -116,7 +116,7 @@ parse the dynamic import syntax but is not transforming it. For that you will ne > Note: > -> `React.lazy` and Suspense are not yet available for server-side rendering. If you want to do code-splitting in a server rendered app, we recommend [Loadable Components](https://github.com/smooth-code/loadable-components). It has a nice [guide for bundle splitting with server-side rendering](https://github.com/smooth-code/loadable-components/blob/master/packages/server/README.md). +> `React.lazy` and Suspense are not yet available for server-side rendering. If you want to do code-splitting in a server rendered app, we recommend [Loadable Components](https://github.com/smooth-code/loadable-components). It has a nice [guide for bundle splitting with server-side rendering](https://www.smooth-code.com/open-source/loadable-components/docs/server-side-rendering/). The `React.lazy` function lets you render a dynamic import as a regular component. From e560f8ae220b5f5729f1fd07d232089556cab837 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 22 Oct 2019 12:03:19 -0700 Subject: [PATCH 02/37] Blog post announcing prerelease channels (#2455) --- .../blog/2019-10-22-react-release-channels.md | 102 ++++++++++++++++++ content/docs/faq-versioning.md | 2 + content/docs/nav.yml | 52 ++++----- content/docs/release-channels.md | 95 ++++++++++++++++ 4 files changed, 226 insertions(+), 25 deletions(-) create mode 100644 content/blog/2019-10-22-react-release-channels.md create mode 100644 content/docs/release-channels.md diff --git a/content/blog/2019-10-22-react-release-channels.md b/content/blog/2019-10-22-react-release-channels.md new file mode 100644 index 000000000..7be5c4f41 --- /dev/null +++ b/content/blog/2019-10-22-react-release-channels.md @@ -0,0 +1,102 @@ +--- +title: "Preparing for the Future with React Prereleases" +author: [acdlite] +--- + +To share upcoming changes with our partners in the React ecoystem, we're establishing official prerelease channels. We hope this process will help us make changes to React with confidence, and give developers the opportunity to try out experimental features. + +> This post will be most relevant to developers who work on frameworks, libraries, or developer tooling. Developers who use React primarily to build user-facing applications should not need to worry about our prerelease channels. + +React relies on a thriving open source community to file bug reports, open pull requests, and [submit RFCs](https://github.com/reactjs/rfcs). To encourage feedback, we sometimes share special builds of React that include unreleased features. + +Because the source of truth for React is our [public GitHub repository](https://github.com/facebook/react), it's always been possible to build a copy of React that includes the latest changes. However it's much easier for developers to install React from npm, so we occasionally publish prerelease builds to the npm registry. A recent example is the 16.7 alpha, which included an early version of the Hooks API. + +We would like to make it even easier for developers to test prerelease builds of React, so we're formalizing our process with three separate release channels. + +## Release Channels + +> The information in this post is also available on our [Release Channels](/docs/release-channels.html) page. We will update that document whenever there are changes to our release process. + +Each of React's release channels is designed for a distinct use case: + +- [**Latest**](#latest-channel) is for stable, semver React releases. It's what you get when you install React from npm. This is the channel you're already using today. **Use this for all user-facing React applications.** +- [**Next**](#next-channel) tracks the master branch of the React source code repository. Think of these as release candidates for the next minor semver release. Use this for integration testing between React and third party projects. +- [**Experimental**](#experimental-channel) includes experimental APIs and features that aren't available in the stable releases. These also track the master branch, but with additional feature flags turned on. Use this to try out upcoming features before they are released. + +All releases are published to npm, but only Latest uses [semantic versioning](/docs/faq-versioning.html). Prereleases (those in the Next and Experimental channels) have versions generated from a hash of their contents, e.g. `0.0.0-1022ee0ec` for Next and `0.0.0-experimental-1022ee0ec` for Experimental. + +**The only officially supported release channel for user-facing applications is Latest**. Next and Experimental releases are provided for testing purposes only, and we provide no guarantees that behavior won't change between releases. They do not follow the semver protocol that we use for releases from Latest. + +By publishing prereleases to the same registry that we use for stable releases, we are able to take advantage of the many tools that support the npm workflow, like [unpkg](https://unpkg.com) and [CodeSandbox](https://codesandbox.io). + +### Latest Channel + +Latest is the channel used for stable React releases. It corresponds to the `latest` tag on npm. It is the recommended channel for all React apps that are shipped to real users. + +**If you're not sure which channel you should use, it's Latest.** If you're a React developer, this is what you're already using. + +You can expect updates to Latest to be extremely stable. Versions follow the semantic versioning scheme. Learn more about our commitment to stability and incremental migration in our [versioning policy](/docs/faq-versioning.html). + +### Next Channel + +The Next channel is a prerelease channel that tracks the master branch of the React repository. We use prereleases in the Next channel as release candidates for the Latest channel. You can think of Next as a superset of Latest that is updated more frequently. + +The degree of change between the most recent Next release and the most recent Latest release is approximately the same as you would find between two minor semver releases. However, **the Next channel does not conform to semantic versioning.** You should expect occasional breaking changes between successive releases in the Next channel. + +**Do not use prereleases in user-facing applications.** + +Releases in Next are published with the `next` tag on npm. Versions are generated from a hash of the build's contents, e.g. `0.0.0-1022ee0ec`. + +#### Using the Next Channel for Integration Testing + +The Next channel is designed to support integration testing between React and other projects. + +All changes to React go through extensive internal testing before they are released to the public. However, there are a myriad of environments and configurations used throughout the React ecosystem, and it's not possible for us to test against every single one. + +If you're the author of a third party React framework, library, developer tool, or similar infrastructure-type project, you can help us keep React stable for your users and the entire React community by periodically running your test suite against the most recent changes. If you're interested, follow these steps: + +- Set up a cron job using your preferred continuous integration platform. Cron jobs are supported by both [CircleCI](https://circleci.com/docs/2.0/triggers/#scheduled-builds) and [Travis CI](https://docs.travis-ci.com/user/cron-jobs/). +- In the cron job, update your React packages to the most recent React release in the Next channel, using `next` tag on npm. Using the npm cli: + + ``` + npm update react@next react-dom@next + ``` + + Or yarn: + + ``` + yarn upgrade react@next react-dom@next + ``` +- Run your test suite against the updated packages. +- If everything passes, great! You can expect that your project will work with the next minor React release. +- If something breaks unexpectedly, please let us know by [filing an issue](https://github.com/facebook/react/issues). + +A project that uses this workflow is Next.js. (No pun intended! Seriously!) You can refer to their [CircleCI configuration](https://github.com/zeit/next.js/blob/c0a1c0f93966fe33edd93fb53e5fafb0dcd80a9e/.circleci/config.yml) as an example. + +### Experimental Channel + +Like Next, the Experimental channel is a prerelease channel that tracks the master branch of the React repository. Unlike Next, Experimental releases include additional features and APIs that are not ready for wider release. + +Usually, an update to Next is accompanied by a corresponding update to Experimental. They are based on the same source revision, but are built using a different set of feature flags. + +Experimental releases may be significantly different than releases to Next and Latest. **Do not use Experimental releases in user-facing applications.** You should expect frequent breaking changes between releases in the Experimental channel. + +Releases in Experimental are published with the `experimental` tag on npm. Versions are generated from a hash of the build's contents, e.g. `0.0.0-experimental-1022ee0ec`. + +#### What Goes Into an Experimental Release? + +Experimental features are ones that are not ready to be released to the wider public, and may change drastically before they are finalized. Some experiments may never be finalized -- the reason we have experiments is to test the viability of proposed changes. + +For example, if the Experimental channel had existed when we announced Hooks, we would have released Hooks to the Experimental channel weeks before they were available in Latest. + +You may find it valuable to run integration tests against Experimental. This is up to you. However, be advised that Experimental is even less unstable than Next. **We do not guarantee any stability between Experimental releases.** + +#### How Can I Learn More About Experimental Features? + +Experimental features may or may not be documented. Usually, experiments aren't documented until they are close to shipping in Next or Stable. + +If a feature is not documented, they may be accompanied by an [RFC](https://github.com/reactjs/rfcs). + +We will post to the React blog when we're ready to announce new experiments, but that doesn't mean we will publicize every experiment. + +You can always refer to our public GitHub repository's [history](https://github.com/facebook/react/commits/master) for a comprehensive list of changes. diff --git a/content/docs/faq-versioning.md b/content/docs/faq-versioning.md index ab45ddf74..df45e05a3 100644 --- a/content/docs/faq-versioning.md +++ b/content/docs/faq-versioning.md @@ -18,6 +18,8 @@ Major releases can also contain new features, and any release can include bug fi Minor releases are the most common type of release. +> This versioning policy does not apply to prerelease builds in the Next or Experimental channels. [Learn more about prereleases.](/docs/release-channels.html) + ### Breaking Changes {#breaking-changes} Breaking changes are inconvenient for everyone, so we try to minimize the number of major releases – for example, React 15 was released in April 2016 and React 16 was released in September 2017; React 17 isn't expected until 2019. diff --git a/content/docs/nav.yml b/content/docs/nav.yml index 4a481fc01..07bf3d9ef 100644 --- a/content/docs/nav.yml +++ b/content/docs/nav.yml @@ -8,6 +8,8 @@ title: Create a New React App - id: cdn-links title: CDN Links + - id: release-channels + title: Release Channels - title: Main Concepts isOrdered: true items: @@ -109,25 +111,25 @@ - title: Hooks (New) isOrdered: true items: - - id: hooks-intro - title: Introducing Hooks - - id: hooks-overview - title: Hooks at a Glance - - id: hooks-state - title: Using the State Hook - - id: hooks-effect - title: Using the Effect Hook - - id: hooks-rules - title: Rules of Hooks - - id: hooks-custom - title: Building Your Own Hooks - - id: hooks-reference - title: Hooks API Reference - - id: hooks-faq - title: Hooks FAQ + - id: hooks-intro + title: Introducing Hooks + - id: hooks-overview + title: Hooks at a Glance + - id: hooks-state + title: Using the State Hook + - id: hooks-effect + title: Using the Effect Hook + - id: hooks-rules + title: Rules of Hooks + - id: hooks-custom + title: Building Your Own Hooks + - id: hooks-reference + title: Hooks API Reference + - id: hooks-faq + title: Hooks FAQ - title: Testing items: - - id: testing + - id: testing title: Testing Overview - id: testing-recipes title: Testing Recipes @@ -135,14 +137,14 @@ title: Testing Environments - title: Contributing items: - - id: how-to-contribute - title: How to Contribute - - id: codebase-overview - title: Codebase Overview - - id: implementation-notes - title: Implementation Notes - - id: design-principles - title: Design Principles + - id: how-to-contribute + title: How to Contribute + - id: codebase-overview + title: Codebase Overview + - id: implementation-notes + title: Implementation Notes + - id: design-principles + title: Design Principles - title: FAQ items: - id: faq-ajax diff --git a/content/docs/release-channels.md b/content/docs/release-channels.md new file mode 100644 index 000000000..cc87335e6 --- /dev/null +++ b/content/docs/release-channels.md @@ -0,0 +1,95 @@ +--- +id: release-channels +title: Release Channels +permalink: docs/release-channels.html +layout: docs +category: installation +--- + +React relies on a thriving open source community to file bug reports, open pull requests, and [submit RFCs](https://github.com/reactjs/rfcs). To encourage feedback we sometimes share special builds of React that include unreleased features. + +> This document will be most relevant to developers who work on frameworks, libraries, or developer tooling. Developers who use React primarily to build user-facing applications should not need to worry about our prerelease channels. + +Each of React's release channels is designed for a distinct use case: + +- [**Latest**](#latest-channel) is for stable, semver React releases. It's what you get when you install React from npm. This is the channel you're already using today. **Use this for all user-facing React applications.** +- [**Next**](#next-channel) tracks the master branch of the React source code repository. Think of these as release candidates for the next minor semver release. Use this for integration testing between React and third party projects. +- [**Experimental**](#experimental-channel) includes experimental APIs and features that aren't available in the stable releases. These also track the master branch, but with additional feature flags turned on. Use this to try out upcoming features before they are released. + +All releases are published to npm, but only Latest uses [semantic versioning](/docs/faq-versioning.html). Prereleases (those in the Next and Experimental channels) have versions generated from a hash of their contents, e.g. `0.0.0-1022ee0ec` for Next and `0.0.0-experimental-1022ee0ec` for Experimental. + +**The only officially supported release channel for user-facing applications is Latest**. Next and Experimental releases are provided for testing purposes only, and we provide no guarantees that behavior won't change between releases. They do not follow the semver protocol that we use for releases from Latest. + +By publishing prereleases to the same registry that we use for stable releases, we are able to take advantage of the many tools that support the npm workflow, like [unpkg](https://unpkg.com) and [CodeSandbox](https://codesandbox.io). + +### Latest Channel + +Latest is the channel used for stable React releases. It corresponds to the `latest` tag on npm. It is the recommended channel for all React apps that are shipped to real users. + +**If you're not sure which channel you should use, it's Latest.** If you're a React developer, this is what you're already using. + +You can expect updates to Latest to be extremely stable. Versions follow the semantic versioning scheme. Learn more about our commitment to stability and incremental migration in our [versioning policy](/docs/faq-versioning.html). + +### Next Channel + +The Next channel is a prerelease channel that tracks the master branch of the React repository. We use prereleases in the Next channel as release candidates for the Latest channel. You can think of Next as a superset of Latest that is updated more frequently. + +The degree of change between the most recent Next release and the most recent Latest release is approximately the same as you would find between two minor semver releases. However, **the Next channel does not conform to semantic versioning.** You should expect occasional breaking changes between successive releases in the Next channel. + +**Do not use prereleases in user-facing applications.** + +Releases in Next are published with the `next` tag on npm. Versions are generated from a hash of the build's contents, e.g. `0.0.0-1022ee0ec`. + +#### Using the Next Channel for Integration Testing + +The Next channel is designed to support integration testing between React and other projects. + +All changes to React go through extensive internal testing before they are released to the public. However, there are a myriad of environments and configurations used throughout the React ecosystem, and it's not possible for us to test against every single one. + +If you're the author of a third party React framework, library, developer tool, or similar infrastructure-type project, you can help us keep React stable for your users and the entire React community by periodically running your test suite against the most recent changes. If you're interested, follow these steps: + +- Set up a cron job using your preferred continuous integration platform. Cron jobs are supported by both [CircleCI](https://circleci.com/docs/2.0/triggers/#scheduled-builds) and [Travis CI](https://docs.travis-ci.com/user/cron-jobs/). +- In the cron job, update your React packages to the most recent React release in the Next channel, using `next` tag on npm. Using the npm cli: + + ``` + npm update react@next react-dom@next + ``` + + Or yarn: + + ``` + yarn upgrade react@next react-dom@next + ``` +- Run your test suite against the updated packages. +- If everything passes, great! You can expect that your project will work with the next minor React release. +- If something breaks unexpectedly, please let us know by [filing an issue](https://github.com/facebook/react/issues). + +A project that uses this workflow is Next.js. (No pun intended! Seriously!) You can refer to their [CircleCI configuration](https://github.com/zeit/next.js/blob/c0a1c0f93966fe33edd93fb53e5fafb0dcd80a9e/.circleci/config.yml) as an example. + +### Experimental Channel + +Like Next, the Experimental channel is a prerelease channel that tracks the master branch of the React repository. Unlike Next, Experimental releases include additional features and APIs that are not ready for wider release. + +Usually, an update to Next is accompanied by a corresponding update to Experimental. They are based on the same source revision, but are built using a different set of feature flags. + +Experimental releases may be significantly different than releases to Next and Latest. **Do not use Experimental releases in user-facing applications.** You should expect frequent breaking changes between releases in the Experimental channel. + +Releases in Experimental are published with the `experimental` tag on npm. Versions are generated from a hash of the build's contents, e.g. `0.0.0-experimental-1022ee0ec`. + +#### What Goes Into an Experimental Release? + +Experimental features are ones that are not ready to be released to the wider public, and may change drastically before they are finalized. Some experiments may never be finalized -- the reason we have experiments is to test the viability of proposed changes. + +For example, if the Experimental channel had existed when we announced Hooks, we would have released Hooks to the Experimental channel weeks before they were available in Latest. + +You may find it valuable to run integration tests against Experimental. This is up to you. However, be advised that Experimental is even less unstable than Next. **We do not guarantee any stability between Experimental releases.** + +#### How Can I Learn More About Experimental Features? + +Experimental features may or may not be documented. Usually, experiments aren't documented until they are close to shipping in Next or Stable. + +If a feature is not documented, they may be accompanied by an [RFC](https://github.com/reactjs/rfcs). + +We will post to the [React blog](/blog) when we're ready to announce new experiments, but that doesn't mean we will publicize every experiment. + +You can always refer to our public GitHub repository's [history](https://github.com/facebook/react/commits/master) for a comprehensive list of changes. From be0cd9ff799e275565f97dd6679aac2391bb7e76 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 22 Oct 2019 12:05:14 -0700 Subject: [PATCH 03/37] Typo --- content/blog/2019-10-22-react-release-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2019-10-22-react-release-channels.md b/content/blog/2019-10-22-react-release-channels.md index 7be5c4f41..5efd8be5d 100644 --- a/content/blog/2019-10-22-react-release-channels.md +++ b/content/blog/2019-10-22-react-release-channels.md @@ -3,7 +3,7 @@ title: "Preparing for the Future with React Prereleases" author: [acdlite] --- -To share upcoming changes with our partners in the React ecoystem, we're establishing official prerelease channels. We hope this process will help us make changes to React with confidence, and give developers the opportunity to try out experimental features. +To share upcoming changes with our partners in the React ecosystem, we're establishing official prerelease channels. We hope this process will help us make changes to React with confidence, and give developers the opportunity to try out experimental features. > This post will be most relevant to developers who work on frameworks, libraries, or developer tooling. Developers who use React primarily to build user-facing applications should not need to worry about our prerelease channels. From b4b53b3d4c62d70bac179ef4ab92fb86c8cf280d Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 22 Oct 2019 13:16:36 -0700 Subject: [PATCH 04/37] Fix double negative more unstable -> less stable --- content/blog/2019-10-22-react-release-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2019-10-22-react-release-channels.md b/content/blog/2019-10-22-react-release-channels.md index 5efd8be5d..f841c5abe 100644 --- a/content/blog/2019-10-22-react-release-channels.md +++ b/content/blog/2019-10-22-react-release-channels.md @@ -89,7 +89,7 @@ Experimental features are ones that are not ready to be released to the wider pu For example, if the Experimental channel had existed when we announced Hooks, we would have released Hooks to the Experimental channel weeks before they were available in Latest. -You may find it valuable to run integration tests against Experimental. This is up to you. However, be advised that Experimental is even less unstable than Next. **We do not guarantee any stability between Experimental releases.** +You may find it valuable to run integration tests against Experimental. This is up to you. However, be advised that Experimental is even less stable than Next. **We do not guarantee any stability between Experimental releases.** #### How Can I Learn More About Experimental Features? From 2a15e912ec1c15506344b3e10553ceab6968208e Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Tue, 22 Oct 2019 13:18:28 -0700 Subject: [PATCH 05/37] Fix double negative on Release Channels page, too --- content/docs/release-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/release-channels.md b/content/docs/release-channels.md index cc87335e6..e6e814f41 100644 --- a/content/docs/release-channels.md +++ b/content/docs/release-channels.md @@ -82,7 +82,7 @@ Experimental features are ones that are not ready to be released to the wider pu For example, if the Experimental channel had existed when we announced Hooks, we would have released Hooks to the Experimental channel weeks before they were available in Latest. -You may find it valuable to run integration tests against Experimental. This is up to you. However, be advised that Experimental is even less unstable than Next. **We do not guarantee any stability between Experimental releases.** +You may find it valuable to run integration tests against Experimental. This is up to you. However, be advised that Experimental is even less stable than Next. **We do not guarantee any stability between Experimental releases.** #### How Can I Learn More About Experimental Features? From 6de2fdf80b5c66e7b37c7d8338a2c2fa7681865f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Czaj=C4=99cki?= Date: Wed, 23 Oct 2019 10:17:17 +0100 Subject: [PATCH 06/37] Add app.js Conf to conferences (#2458) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add app.js conf * Change spelling of Kraków --- content/community/conferences.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/community/conferences.md b/content/community/conferences.md index 77ccf89d2..9aaaabad7 100644 --- a/content/community/conferences.md +++ b/content/community/conferences.md @@ -12,6 +12,11 @@ Do you know of a local React.js conference? Add it here! (Please keep the list c ## Upcoming Conferences {#upcoming-conferences} +### App.js Conf 2020 {#appjsonf2020} +April 23 - 24, 2020 in Kraków, Poland + +[Website](http://appjs.co/react) - [Twitter](https://twitter.com/appjsconf) + ### React Summit 2019 {#reactsummit2019} November 30, 2019 in Lagos, Nigeria From 9932845b39751462a8035fff29728627ea2689b5 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Thu, 24 Oct 2019 08:55:49 -0700 Subject: [PATCH 07/37] Concurrent Mode Documentation (#2461) --- content/docs/concurrent-mode-adoption.md | 130 +++ content/docs/concurrent-mode-intro.md | 89 +++ content/docs/concurrent-mode-patterns.md | 922 ++++++++++++++++++++++ content/docs/concurrent-mode-reference.md | 203 +++++ content/docs/concurrent-mode-suspense.md | 675 ++++++++++++++++ content/docs/nav.yml | 17 +- content/images/docs/cm-steps-simple.png | Bin 0 -> 284535 bytes static/_redirects | 1 + 8 files changed, 2035 insertions(+), 2 deletions(-) create mode 100644 content/docs/concurrent-mode-adoption.md create mode 100644 content/docs/concurrent-mode-intro.md create mode 100644 content/docs/concurrent-mode-patterns.md create mode 100644 content/docs/concurrent-mode-reference.md create mode 100644 content/docs/concurrent-mode-suspense.md create mode 100644 content/images/docs/cm-steps-simple.png diff --git a/content/docs/concurrent-mode-adoption.md b/content/docs/concurrent-mode-adoption.md new file mode 100644 index 000000000..dc30b03e6 --- /dev/null +++ b/content/docs/concurrent-mode-adoption.md @@ -0,0 +1,130 @@ +--- +id: concurrent-mode-adoption +title: Adopting Concurrent More (Experimental) +permalink: docs/concurrent-mode-adoption.html +prev: concurrent-mode-patterns.html +next: concurrent-mode-reference.html +--- + +>Caution: +> +>This page describes **experimental features that are not yet available in a stable release**. Don't rely on experimental builds of React in production apps. These features may change significantly and without a warning before they become a part of React. +> +>This documentation is aimed at early adopters and people who are curious. If you're new to React, don't worry about these features -- you don't need to learn them right now. + +- [Installation](#installation) + - [Who Is This Experimental Release For?](#who-is-this-experimental-release-for) + - [Enabling Concurrent Mode](#enabling-concurrent-mode) +- [What to Expect](#what-to-expect) + - [Migration Step: Blocking Mode](#migration-step-blocking-mode) + - [Why So Many Modes?](#why-so-many-modes) + - [Feature Comparison](#feature-comparison) + +## Installation {#installation} + +Concurrent Mode is only available in the [experimental builds](/blog/2019/10/22/react-release-channels.html#experimental-channel) of React. To install them, run: + +``` +npm install react@experimental react-dom@experimental +``` + +**There are no semantic versioning guarantees for the experimental builds.** +APIs may be added, changed, or removed with any `@experimental` release. + +**Experimental releases will have frequent breaking changes.** + +You can try these builds on personal projects or in a branch, but we don't recommend running them in production. At Facebook, we *do* run them in production, but that's because we're also there to fix bugs when something breaks. You've been warned! + +### Who Is This Experimental Release For? {#who-is-this-experimental-release-for} + +This release is primarily aimed at early adopters, library authors, and curious people. + +We're using this code in production (and it works for us) but there are still some bugs, missing features, and gaps in the documentation. We'd like to hear more about what breaks in Concurrent Mode so we can better prepare it for an official stable release in the future. + +### Enabling Concurrent Mode {#enabling-concurrent-mode} + +Normally, when we add features to React, you can start using them immediately. Fragments, Context, and even Hooks are examples of such features. You can use in new code without making any changes to the existing code. + +Concurrent Mode is different. It introduces semantic changes to how React works. Otherwise, the [new features](/docs/concurrent-mode-patterns.html) enabled by it *wouldn't be possible*. This is why they're grouped into a new "mode" rather than released one by one in isolation. + +You can't opt into Concurrent Mode on a per-subtree basis. Instead, to opt in, you have to do it in the place where today you call `ReactDOM.render()`. + +**This will enable Concurrent Mode for the whole `` tree:** + +```js +import ReactDOM from 'react-dom'; + +// If you previously had: +// +// ReactDOM.render(, document.getElementById('root')); +// +// You can opt into Concurrent Mode by writing: + +ReactDOM.createRoot( + document.getElementById('root') +).render(); +``` + +>Note: +> +>Concurrent Mode APIs such as `createRoot` only exist in the experimental builds of React. + +In Concurrent Mode, the lifecycle methods [previously marked](https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html) as "unsafe" actually *are* unsafe, and lead to bugs even more than in today's React. We don't recommend trying Concurrent Mode until your app is [Strict Mode](https://reactjs.org/docs/strict-mode.html)-compatible. + +## What to Expect {#what-to-expect} + +If you have a large existing app, or if your app depends on a lot of third-party packages, please don't expect that you can use the Concurrent Mode immediately. **For example, at Facebook we are using Concurrent Mode for the new website, but we're not planning to enable it on the old website.** This is because our old website still uses unsafe lifecycle methods in the product code, incompatible third-party libraries, and patterns that don't work well with the Concurrent Mode. + +In our experience, code that uses idiomatic React patterns and doesn't rely on external state management solutions is the easiest to get running in the Concurrent Mode. We will describe common problems we've seen and the solutions to them separately in the coming weeks. + +### Migration Step: Blocking Mode {#migration-step-blocking-mode} + +For older codebases, Concurrent Mode might be a step too far. This is why we also provide a new "Blocking Mode" in the experimental React builds. You can try it by substituting `createRoot` with `createBlockingRoot`. It only offers a *small subset* of the Concurrent Mode features, but it is closer to how React works today and can serve as a migration step. + +To recap: + +* **Legacy Mode:** `ReactDOM.render(, rootNode)`. This is what React apps use today. There are no plans to remove the legacy mode in the observable future — but it won't be able to support these new features. +* **Blocking Mode:** `ReactDOM.createBlockingRoot(rootNode).render()`. It is currently experimental. It is intended as a first migration step for apps that want to get a subset of Concurrent Mode features. +* **Concurrent Mode:** `ReactDOM.createRoot(rootNode).render()`. It is currently experimental. In the future, after it stabilizes, we intend to make it the default React mode. This mode enables *all* the new features. + +### Why So Many Modes? {#why-so-many-modes} + +We think it is better to offer a [gradual migration strategy](/docs/faq-versioning.html#commitment-to-stability) than to make huge breaking changes — or to let React stagnate into irrelevance. + +In practice, we expect that most apps using Legacy Mode today should be able to migrate at least to the Blocking Mode (if not Concurrent Mode). This fragmentation can be annoying for libraries that aim to support all Modes in the short term. However, gradually moving the ecosystem away from the Legacy Mode will also *solve* problems that affect major libraries in the React ecosystem, such as [confusing Suspense behavior when reading layout](https://github.com/facebook/react/issues/14536) and [lack of consistent batching guarantees](https://github.com/facebook/react/issues/15080). There's a number of bugs that can't be fixed in Legacy Mode without changing semantics, but don't exist in Blocking and Concurrent Modes. + +You can think of the Blocking Mode as of a "gracefully degraded" version of the Concurrent Mode. **As a result, in longer term we should be able to converge and stop thinking about different Modes altogether.** But for now, Modes are an important migration strategy. They let everyone decide when a migration is worth it, and upgrade at their own pace. + +### Feature Comparison {#feature-comparison} + + + +
+ +| |Legacy Mode |Blocking Mode |Concurrent Mode | +|--- |--- |--- |--- | +|String Refs |✅ |🚫** |🚫** | +|Legacy Context |✅ |🚫** |🚫** | +|findDOMNode |✅ |🚫** |🚫** | +|Suspense |✅ |✅ |✅ | +|SuspenseList |🚫 |✅ |✅ | +|Suspense SSR + Hydration |🚫 |✅ |✅ | +|Progressive Hydration |🚫 |✅ |✅ | +|Selective Hydration |🚫 |🚫 |✅ | +|Cooperative Multitasking |🚫 |🚫 |✅ | +|Automatic batching of multiple setStates    |🚫* |✅ |✅ | +|Priority-based Rendering |🚫 |🚫 |✅ | +|Interruptible Prerendering |🚫 |🚫 |✅ | +|useTransition |🚫 |🚫 |✅ | +|useDeferredValue |🚫 |🚫 |✅ | +|Suspense Reveal "Train" |🚫 |🚫 |✅ | + +
+ +\*: Legacy mode has automatic batching in React-managed events but it's limited to one browser task. Non-React events must opt-in using `unstable_batchedUpdates`. In Blocking Mode and Concurrent Mode, all `setState`s are batched by default. + +\*\*: Warns in development. diff --git a/content/docs/concurrent-mode-intro.md b/content/docs/concurrent-mode-intro.md new file mode 100644 index 000000000..43177d05d --- /dev/null +++ b/content/docs/concurrent-mode-intro.md @@ -0,0 +1,89 @@ +--- +id: concurrent-mode-intro +title: Introducing Concurrent Mode (Experimental) +permalink: docs/concurrent-mode-intro.html +next: concurrent-mode-suspense.html +--- + +>Caution: +> +>This page describes **experimental features that are [not yet available](/docs/concurrent-mode-adoption.html) in a stable release**. Don't rely on experimental builds of React in production apps. These features may change significantly and without a warning before they become a part of React. +> +>This documentation is aimed at early adopters and people who are curious. If you're new to React, don't worry about these features -- you don't need to learn them right now. + +This page provides a theoretical overview of Concurrent Mode. **For a more practical introduction, you might want to check out the next sections:** + +* [Suspense for Data Fetching](/docs/concurrent-mode-suspense.html) describes a new mechanism for fetching data in React components. +* [Concurrent UI Patterns](/docs/concurrent-mode-patterns.html) shows some UI patterns made possible by Concurrent Mode and Suspense. +* [Adopting Concurrent Mode](/docs/concurrent-mode-adoption.html) explains how you can try Concurrent Mode in your project. +* [Concurrent Mode API Reference](/docs/concurrent-mode-reference.html) documents the new APIs available in experimental builds. + +## What Is Concurrent Mode? {#what-is-concurrent-mode} + +Concurrent Mode is a set of new features that help React apps stay responsive and gracefully adjust to the user's device capabilities and network speed. + +These features are still experimental and are subject to change. They are not yet a part of a stable React release, but you can try them in an experimental build. + +## Blocking vs Interruptible Rendering {#blocking-vs-interruptible-rendering} + +**To explain Concurrent Mode, we'll use version control as a metaphor.** If you work on a team, you probably use a version control system like Git and work on branches. When a branch is ready, you can merge your work into master so that other people can pull it. + +Before version control existed, the development workflow was very different. There was no concept of branches. If you wanted to edit some files, you had to tell everyone not to touch those files until you've finished your work. You couldn't even start working on them concurrently with that person — you were literally *blocked* by them. + +This illustrates how UI libraries, including React, typically work today. Once they start rendering an update, including creating new DOM nodes and running the code inside components, they can't interrupt this work. We'll call this approach "blocking rendering". + +In Concurrent Mode, rendering is not blocking. It is interruptible. This improves the user experience. It also unlocks new features that weren't possible before. Before we look at concrete examples in the [next](/docs/concurrent-mode-suspense.html) [chapters](/docs/concurrent-mode-patterns.html), we'll do a high-level overview of new features. + +### Interruptible Rendering {#interruptible-rendering} + +Consider a filterable product list. Have you ever typed into a list filter and felt that it stutters on every key press? Some of the work to update the product list might be unavoidable, such as creating new DOM nodes or the browser performing layout. However, *when* and *how* we perform that work plays a big role. + +A common way to work around the stutter is to "debounce" the input. When debouncing, we only update the list *after* the user stops typing. However, it can be frustrating that the UI doesn't update while we're typing. As an alternative, we could "throttle" the input, and update the list with a certain maximum frequency. But then on lower-powered devices we'd still end up with stutter. Both debouncing and throttling create a suboptimal user experience. + +The reason for the stutter is simple: once rendering begins, it can't be interrupted. So the browser can't update the text input right after the key press. No matter how good a UI library (such as React) might look on a benchmark, if it uses blocking rendering, a certain amount of work in your components will always cause stutter. And, often, there is no easy fix. + +**Concurrent Mode fixes this fundamental limitation by making rendering interruptible.** This means when the user presses another key, React doesn't need to block the browser from updating the text input. Instead, it can let the browser paint an update to the input, and then continue rendering the updated list *in memory*. When the rendering is finished, React updates the DOM, and changes are reflected on the screen. + +Conceptually, you can think of this as React preparing every update "on a branch". Just like you can abandon work in branches or switch between them, React in Concurrent Mode can interrupt an ongoing update to do something more important, and then come back to what it was doing earlier. This technique might also remind you of [double buffering](https://wiki.osdev.org/Double_Buffering) in video games. + +Concurrent Mode techniques reduce the need for debouncing and throttling in UI. Because rendering is interruptible, React doesn't need to artificially *delay* work to avoid stutter. It can start rendering right away, but interrupt this work when needed to keep the app responsive. + +### Intentional Loading Sequences {#intentional-loading-sequences} + +We've said before that Concurrent Mode is like React working "on a branch". Branches are useful not only for short-term fixes, but also for long-running features. Sometimes you might work on a feature, but it could take weeks before it's in a "good enough state" to merge into master. This side of our version control metaphor applies to rendering too. + +Imagine we're navigating between two screens in an app. Sometimes, we might not have enough code and data loaded to show a "good enough" loading state to the user on the new screen. Transitioning to an empty screen or a large spinner can be a jarring experience. However, it's also common that the necessary code and data doesn't take too long to fetch. **Wouldn't it be nicer if React could stay on the old screen for a little longer, and "skip" the "bad loading state" before showing the new screen?** + +While this is possible today, it can be difficult to orchestrate. In Concurrent Mode, this feature is built-in. React starts preparing the new screen in memory first — or, as our metaphor goes, "on a different branch". So React can wait before updating the DOM so that more content can load. In Concurrent Mode, we can tell React to keep showing the old screen, fully interactive, with an inline loading indicator. And when the new screen is ready, React can take us to it. + +### Concurrency {#concurrency} + +Let's recap the two examples above and see how Concurrent Mode unifies them. **In Concurrent Mode, React can work on several state updates *concurrently*** — just like branches let different team members work independently: + +* For CPU-bound updates (such as creating DOM nodes and running component code), concurrency means that a more urgent update can "interrupt" rendering that has already started. +* For IO-bound updates (such as fetching code or data from the network), concurrency means that React can start rendering in memory even before all the data arrives, and skip showing jarring empty loading states. + +Importantly, the way you *use* React is the same. Concepts like components, props, and state fundamentally work the same way. When you want to update the screen, you set the state. + +React uses a heuristic to decide how "urgent" an update is, and lets you adjust it with a few lines of code so that you can achieve the desired user experience for every interaction. + +## Putting Research into Production {#putting-research-into-production} + +There is a common theme around Concurrent Mode features. **Its mission is to help integrate the findings from the Human-Computer Interaction research into real UIs.** + +For example, research shows that displaing too many intermediate loading states when transitioning between screens makes a transition feel *slower*. This is why Concurrent Mode shows new loading states on a fixed "schedule" to avoid jarring and too frequent updates. + +Similarly, we know from research that interactions like hover and text input need to be handled within a very short period of time, while clicks and page transitions can wait a little longer without feeling laggy. The different "priorities" that Concurrent Mode uses internally roughly correspond to the interaction categories in the human perception research. + +Teams with a strong focus on user experience sometimes solve similar problems with one-off solutions. However, those solutions rarely survive for a long time, as they're hard to maintain. With Concurrent Mode, our goal is to bake the UI research findings into the abstraction itself, and provide idiomatic ways to use them. As a UI library, React is well-positioned to do that. + +## Next Steps {#next-steps} + +Now you know what Concurrent Mode is all about! + +On the next pages, you'll learn more details about specific topics: + +* [Suspense for Data Fetching](/docs/concurrent-mode-suspense.html) describes a new mechanism for fetching data in React components. +* [Concurrent UI Patterns](/docs/concurrent-mode-patterns.html) shows some UI patterns made possible by Concurrent Mode and Suspense. +* [Adopting Concurrent Mode](/docs/concurrent-mode-adoption.html) explains how you can try Concurrent Mode in your project. +* [Concurrent Mode API Reference](/docs/concurrent-mode-reference.html) documents the new APIs available in experimental builds. \ No newline at end of file diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md new file mode 100644 index 000000000..48e3fa541 --- /dev/null +++ b/content/docs/concurrent-mode-patterns.md @@ -0,0 +1,922 @@ +--- +id: concurrent-mode-patterns +title: Concurrent UI Patterns (Experimental) +permalink: docs/concurrent-mode-patterns.html +prev: concurrent-mode-suspense.html +next: concurrent-mode-adoption.html +--- + +>Caution: +> +>This page describes **experimental features that are [not yet available](/docs/concurrent-mode-adoption.html) in a stable release**. Don't rely on experimental builds of React in production apps. These features may change significantly and without a warning before they become a part of React. +> +>This documentation is aimed at early adopters and people who are curious. If you're new to React, don't worry about these features -- you don't need to learn them right now. + +Usually, when we update the state, we expect to see changes on the screen immediately. This makes sense because we want to keep our app responsive to user input. However, there are cases where we might prefer to **defer an update from appearing on the screen**. + +For example, if we switch from one page to another, and none of the code or data for the next screen has loaded yet, it might be frustrating to immediately see a blank page with a loading indicator. We might prefer to stay longer on the previous screen. Implementing this pattern has historically been difficult in React. Concurrent Mode offers a new set of tools to do that. + +- [Transitions](#transitions) + - [Wrapping setState in a Transition](#wrapping-setstate-in-a-transition) + - [Adding a Pending Indicator](#adding-a-pending-indicator) + - [Reviewing the Changes](#reviewing-the-changes) + - [Where Does the Update Happen?](#where-does-the-update-happen) + - [Transitions Are Everywhere](#transitions-are-everywhere) + - [Baking Transitions Into the Design System](#baking-transitions-into-the-design-system) +- [The Three Steps](#the-three-steps) + - [Default: Receded → Skeleton → Complete](#default-receded-skeleton-complete) + - [Preferred: Pending → Skeleton → Complete](#preferred-pending-skeleton-complete) + - [Wrap Lazy Features in ``](#wrap-lazy-features-in-suspense) + - [Suspense Reveal “Train”](#suspense-reveal-train) + - [Delaying a Pending Indicator](#delaying-a-pending-indicator) + - [Recap](#recap) +- [Other Patterns](#other-patterns) + - [Splitting High and Low Priority State](#splitting-high-and-low-priority-state) + - [Deferring a Value](#deferring-a-value) + - [SuspenseList](#suspenselist) +- [Next Steps](#next-steps) + +## Transitions {#transitions} + +Let's revisit [this demo](https://codesandbox.io/s/infallible-feather-xjtbu) from the previous page about [Suspense for Data Fetching](/docs/concurrent-mode-suspense.html). + +When we click the "Next" button to switch the active profile, the existing page data immediately disappears, and we see the loading indicator for the whole page again. We can call this an "undesirable" loading state. **It would be nice if we could "skip" it and wait for some content to load before transitioning to the new screen.** + +React offers a new built-in `useTransition()` Hook to help with this. + +We can use it in three steps. + +First, we'll make sure that we're actually using Concurrent Mode. We'll talk more about [adopting Concurrent Mode](/docs/concurrent-mode-adoption.html) later, but for now it's sufficient to know that we need to use `ReactDOM.createRoot()` rather than `ReactDOM.render()` for this feature to work: + +```js +const rootElement = document.getElementById("root"); +// Opt into Concurrent Mode +ReactDOM.createRoot(rootElement).render(); +``` + +Next, we'll add an import for the `useTransition` Hook from React: + +```js +import React, { useState, useTransition, Suspense } from "react"; +``` + +Finally, we'll use it inside the `App` component: + +```js{3-5} +function App() { + const [resource, setResource] = useState(initialResource); + const [startTransition, isPending] = useTransition({ + timeoutMs: 3000 + }); + // ... +``` + +**By itself, this code doesn't do anything yet.** We will need to use this Hook's return values to set up our state transition. There are two values returned from `useTransition`: + +* `startTransition` is a function. We'll use it to tell React *which* state update we want to defer. +* `isPending` is a boolean. It's React telling us whether that transition is ongoing at the moment. + +We will use them right below. + +Note we passed a configuration object to `useTransition`. Its `timeoutMs` property specifies **how long we're willing to wait for the transition to finish**. By passing `{timeoutMs: 3000}`, we say "If the next profile takes more than 3 seconds to load, show the big spinner -- but before that timeout it's okay to keep showing the previous screen". + +### Wrapping setState in a Transition {#wrapping-setstate-in-a-transition} + +Our "Next" button click handler sets the state that switches the current profile in the state: + +```js{4} + + {isPending ? " Loading..." : null} + + +); +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/jovial-lalande-26yep)** + +Now, this feels a lot better! When we click Next, it gets disabled because clicking it multiple times doesn't make sense. And the new "Loading..." tells the user that the app didn't freeze. + +### Reviewing the Changes {#reviewing-the-changes} + +Let's take another look at all the changes we've made since the [original example](https://codesandbox.io/s/infallible-feather-xjtbu): + +```js{3-5,11,14,19} +function App() { + const [resource, setResource] = useState(initialResource); + const [startTransition, isPending] = useTransition({ + timeoutMs: 3000 + }); + return ( + <> + + {isPending ? " Loading..." : null} + + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/jovial-lalande-26yep)** + +It took us only seven lines of code to add this transition: + +* We've imported the `useTransition` Hook and used it the component that updates the state. +* We've passed `{timeoutMs: 3000}` to stay on the previous screeen for at most 3 seconds. +* We've wrapped our state update into `startTransition` to tell React it's okay to delay it. +* We're using `isPending` to communicate the state transition progress to the user. + +As a result, clicking "Next" doesn't perform an immediate state transition to an "undesirable" loading state, but instead stays on the previous screen and communicates progress there. + +### Where Does the Update Happen? {#where-does-the-update-happen} + +This wasn't very difficult to implement. However, if you start thinking about how this could possibly work, it might become a little mindbending. If we set the state, how come we don't see the result right away? *Where* is the next `` rendering? + +Clearly, both "versions" of `` exist at the same time. We know the old one exists because we see it on the screen and even display a progress indicator on it. And we know the new version also exists *somewhere*, because it's the one that we're waiting for! + +**But how can two versions of the same component exist at the same time?** + +This gets at the root of what Concurrent Mode is. We've [previously said](/docs/concurrent-mode-intro.html#intentional-loading-sequences) it's a bit like React working on state update on a "branch". Another way we can conceptualize is that wrapping a state update in `startTransition` begins rendering it *"in a different universe"*, much like in science fiction movies. We don't "see" that universe directly -- but we can get a signal from it that tells us something is happening (`isPending`). When the update is ready, our "universes" merge back together, and we see the result on the screen! + +Play a bit more with the [demo](https://codesandbox.io/s/jovial-lalande-26yep), and try to imagine it happening. + +Of course, two versions of the tree rendering *at the same time* is an illusion, just like the idea that all programs run on your computer at the same time is an illusion. An operating system switches between different applications very fast. Similarly, React can switch between the version of the tree you see on the screen and the version that it's "preparing" to show next. + +An API like `useTransition` lets you focus on the desired user experience, and not think about the mechanics of how it's implemented. Still, it can be a helpful metaphor to imagine that updates wrapped in `startTransition` happen "on a branch" or "in a different world". + +### Transitions Are Everywhere {#transitions-are-everywhere} + +As we learned from the [Suspense walkthrough](/docs/concurrent-mode-suspense.html), any component can "suspend" any time if some data it needs is not ready yet. We can strategically place `` boundaries in different parts of the tree to handle this, but it won't always be enough. + +Let's get back to our [first Suspense demo](https://codesandbox.io/s/frosty-hermann-bztrp) where there was just one profile. Currently, it fetches the data only once. We'll add a "Refresh" button to check for server updates. + +Our first attempt might look like this: + +```js{6-8,13-15} +const initialResource = fetchUserAndPosts(); + +function ProfilePage() { + const [resource, setResource] = useState(initialResource); + + function handleRefreshClick() { + setResource(fetchUserAndPosts()); + } + + return ( + Loading profile...}> + + + Loading posts...}> + + + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/boring-shadow-100tf)** + +In this example, we start data fetching at the load *and* every time you press "Refresh". We put the result of calling `fetchUserAndPosts()` into state so that components below can start reading the new data from the request we just kicked off. + +We can see in [this example](https://codesandbox.io/s/boring-shadow-100tf) that pressing "Refresh" works. The `` and `` components receive a new `resource` prop that represents the fresh data, they "suspend" because we don't have a response yet, and we see the fallbacks. When the response loads, we can see the updated posts (our fake API adds them every 3 seconds). + +However, the experience feels really jarring. We were browsing a page, but it got replaced by a loading state right as we were interacting with it. It's disorienting. **Just like before, to avoid showing an undesirable loading state, we can wrap the state update in a transition:** + +```js{2-5,9-11,21} +function ProfilePage() { + const [startTransition, isPending] = useTransition({ + // Wait 10 seconds before fallback + timeout: 10000 + }); + const [resource, setResource] = useState(initialResource); + + function handleRefreshClick() { + startTransition(() => { + setResource(fetchProfileData()); + }); + } + + return ( + Loading profile...}> + + + Loading posts...}> + + + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/sleepy-field-mohzb)** + +This feels a lot better! Clicking "Refresh" doesn't pull us away from the page we're browsing anymore. We see something is loading "inline", and when the data is ready, it's displayed. + +### Baking Transitions Into the Design System {#baking-transitions-into-the-design-system} + +We can now see that the need for `useTransition` is *very* common. Pretty much any button click or interaction that can lead to a component suspending needs to be wrapped in `useTransition` to avoid accidentally hiding something the user is interacting with. + +This can lead to a lot of repetitive code across components. This is why **we generally recommend to bake `useTransition` into the *design system* components of your app**. For example, we can extract the transition logic into our own ` + {isPending ? spinner : null} + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/modest-ritchie-iufrh)** + +Note that the button doesn't care *what* state we're updating. It's wrapping *any* state updates that happen during its `onClick` handler into a transition. Now that our ` + Loading posts...}> + + + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/modest-ritchie-iufrh)** + +When a button gets clicked, it starts a transition and calls `props.onClick()` inside of it -- which triggers `handleRefreshClick` in the `` component. We start fetching the fresh data, but it doesn't trigger a fallback because we're inside a transition, and the 10 second timeout specified in the `useTransition` call hasn't passed yet. While a transition is pending, the button displays an inline loading indicator. + +We can see now how Concurrent Mode helps us achieve a good user experience without sacrificing isolation and modularity of components. React coordinates the transition. + +## The Three Steps {#the-three-steps} + +By now we have discussed all of the different visual states that an update may go through. In this section, we will give them names and talk about the progression between them. + +
+ +Three steps + +At the very end, we have the **Complete** state. That's where we want to eventually get to. It represents the moment when the next screen is fully rendered and isn't loading more data. + +But before our screen can be Complete, we might need to load some data or code. When we're on the next screen, but some parts of it are still loading, we call that a **Skeleton** state. + +Finally, there two primary ways that lead us to the Skeleton state. We will illustrate the difference between them with a concrete example. + +### Default: Receded → Skeleton → Complete {#default-receded-skeleton-complete} + +Open [this example](https://codesandbox.io/s/prod-grass-g1lh5) and click "Open Profile". You will see several visual states one by one: + +* **Receded**: For a second, you will see the `

Loading the app...

` fallback. +* **Skeleton:** You will see the `` component with `

Loading posts...

` inside. +* **Complete:** You will see the `` component with no fallbacks inside. Everything was fetched. + +How do we separate the Receded and the Skeleton states? The difference between them is that the **Receded** state feels like "taking a step back" to the user, while the **Skeleton** state feels like "taking a step forward" in our progress to show more content. + +In this example, we started our journey on the ``: + +```js + + {/* previous screen */} + + +``` + +After the click, React started rendering the next screen: + +```js + + {/* next screen */} + + + + + + +``` + +Both `` and `` need data to render, so they suspend: + +```js{4,6} + + {/* next screen */} + + {/* suspends! */} + Loading posts...}> + {/* suspends! */} + + +``` + +When a component suspends, React needs to show the closest fallback. But the closest fallback to `` is at the top level: + +```js{2,3,7} + +

Loading the app...

+}> + {/* next screen */} + + {/* suspends! */} + + + +
+``` + +This is why when we click the button, it feels like we've "taken a step back". The `` boundary which was previously showing useful content (``) had to "recede" to showing the fallback (`

Loading the app...

`). We call that a **Receded** state. + +As we load more data, React will retry rendering, and `` can render successfully. Finally, we're in the **Skeleton** state. We see the new page with missing parts: + +```js{6,7,9} + + {/* next screen */} + + + +

Loading posts...

+ }> + {/* suspends! */} +
+
+``` + +Eventually, they load too, and we get to the **Complete** state. + +This scenario (Receded → Skeleton → Complete) is the default one. However, the Receded state is not very pleasant because it "hides" existing information. This is why React lets us opt into a different sequence (**Pending** → Skeleton → Complete) with `useTransition`. + +### Preferred: Pending → Skeleton → Complete {#preferred-pending-skeleton-complete} + +When we `useTransition`, React will let us "stay" on the previous screen -- and show a progress indicator there. We call that a **Pending** state. It feels much better than the Receded state because none of our existing content disappears, and the page stays interactive. + +You can compare these two examples to feel the difference: + +* Default: [Receded → Skeleton → Complete](https://codesandbox.io/s/prod-grass-g1lh5) +* **Preferred: [Pending → Skeleton → Complete](https://codesandbox.io/s/focused-snow-xbkvl)** + +The only difference between these two examples is that the first uses regular ` + {isPending ? spinner : null} + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/floral-thunder-iy826)** + +This signals to the user that some work is happening. However, if the transition is relatively short (less than 500ms), it might be too distracting and make the transition itself feel *slower*. + +One possible solution to this is to *delay the spinner itself* from displaying: + +```css +.DelayedSpinner { + animation: 0s linear 0.5s forwards makeVisible; + visibility: hidden; +} + +@keyframes makeVisible { + to { + visibility: visible; + } +} +``` + +```js{2-4,10} +const spinner = ( + + {/* ... */} + +); + +return ( + <> + + {isPending ? spinner : null} + +); +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/gallant-spence-l6wbk)** + +With this change, even though we're in the Pending state, we don't display any indication to the user until 500ms has passed. This may not seem like much of an improvement when the API responses are slow. But compare how it feels [before](https://codesandbox.io/s/thirsty-liskov-1ygph) and [after](https://codesandbox.io/s/hardcore-http-s18xr) when the API call is fast. Even though the rest of the code hasn't changed, suppressing a "too fast" loading state improves the perceived performance by not calling attention to the delay. + +### Recap {#recap} + +The most important things we learned so far are: + +* By default, our loading sequence is Receded → Skeleton → Complete. +* The Receded state doesn't feel very nice because it hides existing content. +* With `useTransition`, we can opt into showing a Pending state first instead. This will keep us on the previous screen while the next screen is being prepared. +* If we don't want some component to delay the transition, we can wrap it in its own `` boundary. +* Instead of doing `useTransition` in every other component, we can build it into our design system. + +## Other Patterns {#other-patterns} + +Transitions are probably the most common Concurrent Mode pattern you'll encounter, but there are a few more patterns you might find useful. + +### Splitting High and Low Priority State {#splitting-high-and-low-priority-state} + +When you design React components, it is usually best to find the "minimal representation" of state. For example, instead of keeping `firstName`, `lastName`, and `fullName` in state, it's usually better keep only `firstName` and `lastName`, and then calculate `fullName` during rendering. This lets us avoid mistakes where we update one state but forget the other state. + +However, in Concurrent Mode there are cases where you might *want* to "duplicate" some data in different state variables. Consider this tiny translation app: + +```js +const initialQuery = "Hello, world"; +const initialResource = fetchTranslation(initialQuery); + +function App() { + const [query, setQuery] = useState(initialQuery); + const [resource, setResource] = useState(initialResource); + + function handleChange(e) { + const value = e.target.value; + setQuery(value); + setResource(fetchTranslation(value)); + } + + return ( + <> + + Loading...

}> + +
+ + ); +} + +function Translation({ resource }) { + return ( +

+ {resource.read()} +

+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/brave-villani-ypxvf)** + +Notice how when you type into the input, the `` component suspends, and we see the `

Loading...

` fallback until we get fresh results. This is not ideal. It would be better if we could see the *previous* translation for a bit while we're fetching the next one. + +In fact, if we open the console, we'll see a warning: + +``` +Warning: App triggered a user-blocking update that suspended. + +The fix is to split the update into multiple parts: a user-blocking update to provide immediate feedback, and another update that triggers the bulk of the changes. + +Refer to the documentation for useTransition to learn how to implement this pattern. +``` + +As we mentioned earlier, if some state update causes a component to suspend, that state update should be wrapped in a transition. Let's add `useTransition` to our component: + +```js{4-6,10,13} +function App() { + const [query, setQuery] = useState(initialQuery); + const [resource, setResource] = useState(initialResource); + const [startTransition, isPending] = useTransition({ + timeoutMs: 5000 + }); + + function handleChange(e) { + const value = e.target.value; + startTransition(() => { + setQuery(value); + setResource(fetchTranslation(value)); + }); + } + + // ... + +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/zen-keldysh-rifos)** + +Try typing into the input now. Something's wrong! The input is updating very slowly. + +We've fixed the first problem (suspending outside of a transition). But now because of the transition, our state doesn't update immediately, and it can't "drive" a controlled input! + +The answer to this problem **is to split the state in two parts:** a "high priority" part that updates immediately, and a "low priority" part that may wait for a transition. + +In our example, we already have two state variables. The input text is in `query`, and we read the translation from `resource`. We want changes to the `query` state to happen immediately, but changes to the `resource` (i.e. fetching a new translation) should trigger a transition. + +So the correct fix is to put `setQuery` (which doesn't suspend) *outside* the transition, but `setResource` (which will suspend) *inside* of it. + +```js{4,5} +function handleChange(e) { + const value = e.target.value; + + // Outside the transition (urgent) + setQuery(value); + + startTransition(() => { + // Inside the transition (may be delayed) + setResource(fetchTranslation(value)); + }); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/lively-smoke-fdf93)** + +With this change, it works as expected. We can type into the input immediately, and the translation later "catches up" to what we have typed. + +### Deferring a Value {#deferring-a-value} + +By default, React always renders a consistent UI. Consider code like this: + +```js +<> + + + +``` + +React guarantees that whenever we look at these components on the screen, they will reflect data from the same `user`. If a different `user` is passed down because of a state update, you would see them changing together. You can't ever record a screen and find a frame where they would show values from different `user`s. (If you ever run into a case like this, file a bug!) + +This makes sense in the vast majority of situations. Inconsistent UI is confusing and can mislead users. (For example, it would be terrible if a messager's Send button and the conversation picker pane "disagreed" about which thread is currently selected.) + +However, sometimes it might be helpful to intentionally introduce an inconsistency. We could do it manually by "splitting" the state like above, but React also offers a built-in Hook for this: + +```js +import { useDeferredValue } from 'react'; + +const deferredValue = useDeferredValue(value, { + timeoutMs: 5000 +}); +``` + +To demonstrate this feature, we'll use [the profile switcher example](https://codesandbox.io/s/musing-ramanujan-bgw2o). Click the "Next" button and notice how it takes 1 second to do a transition. + +Let's say that fetching the user details is very fast and only takes 300 milliseconds. Currently, we're waiting a whole second because we need both user details and posts to display a consistent profile page. But what if we want to show the details faster? + +If we're willing to sacrifice consistency, we could **pass potentially stale data to the components that delay our transition**. That's what `useDeferredValue()` lets us do: + +```js{2-4,10,11,21} +function ProfilePage({ resource }) { + const deferredResource = useDeferredValue(resource, { + timeoutMs: 1000 + }); + return ( + Loading profile...}> + + Loading posts...}> + + + + ); +} + +function ProfileTimeline({ isStale, resource }) { + const posts = resource.posts.read(); + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/vigorous-keller-3ed2b)** + +The tradeoff we're making here is that `` will be inconsistent with other components and potentially show an older item. Click "Next" a few times, and you'll notice it. But thanks to that, we were able to cut down the transition time from 1000ms to 300ms. + +Whether or not it's an appropriate tradeoff depends on the situation. But it's a handy tool, especially when the content doesn't change very visible between items, and the user might not even realize they were looking at a stale version for a second. + +It's worth noting that `useDeferredValue` is not *only* useful for data fetching. It also helps when an expensive component tree causes an interaction (e.g. typing in an input) to be sluggish. Just like we can "defer" a value that takes too long to fetch (and show its old value despite others components updating), we can do this with trees that take too long to render. + +For example, consider a filterable list like this: + +```js +function App() { + const [text, setText] = useState("hello"); + + function handleChange(e) { + setText(e.target.value); + } + + return ( +
+ + ... + +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/pensive-shirley-wkp46)** + +In this example, **every item in `` has an artificial slowdown -- each of them blocks the thread for a few milliseconds**. We'd never do this in a real app, but this helps us simulate what can happen in a deep component tree with no single obvious place to optimize. + +We can see how typing in the input causes stutter. Now let's add `useDeferredValue`: + +```js{3-5,18} +function App() { + const [text, setText] = useState("hello"); + const deferredText = useDeferredValue(text, { + timeoutMs: 5000 + }); + + function handleChange(e) { + setText(e.target.value); + } + + return ( +
+ + ... + +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/infallible-dewdney-9fkv9)** + +Now typing has a lot less stutter -- although we pay for this by showing the results with a lag. + +How is this different from debouncing? Our example has a fixed artificial delay (3ms for every one of 80 items), so there is always a delay, no matter how fast our computer is. However, the `useDeferredValue` value only "lags behind" if the rendering takes a while. There is no minimal lag imposed by React. With a more realistic workload, you can expect the lag to adjust to the user’s device. On fast machines, the lag would be smaller or non-existent, and on slow machines, it would be more noticeable. In both cases, the app would remain responsive. That’s the advantage of this mechanism over debouncing or throttling, which always impose a minimal delay and can't avoid blocking the thread while rendering. + +Even though there is an improvement in responsiveness, this example isn't as compelling yet because Concurrent Mode is missing some crucial optimizations for this use case. Still, it is interesting to see that features like `useDeferredValue` (or `useTransition`) are useful regardless of whether we're waiting for network or for computational work to finish. + +### SuspenseList {#suspenselist} + +`` is the last pattern that's related to orchestracting loading states. + +Consider this example: + +```js{5-10} +function ProfilePage({ resource }) { + return ( + <> + + Loading posts...}> + + + Loading fun facts...}> + + + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/proud-tree-exg5t)** + +The API call duration in this example is randomized. If you keep refreshing it, you will notice that sometimes the posts arrive first, and sometimes the "fun facts" arrive first. + +This presents a problem. If the response for fun facts arrives first, we'll see the fun facts below the `

Loading posts...

` fallback for posts. We might start reading them, but then the *posts* response will come back, and shift all the facts down. This is jarring. + +One way we could fix it is by putting them both in a single boundary: + +```js +Loading posts and fun facts...}> + + + +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/currying-violet-5jsiy)** + +The problem with this is that now we *always* wait for both of them to be fetched. However, if it's the *posts* that came back first, there's no reason to delay showing them. When fun facts load later, they won't shift the layout because they're already below the posts. + +Other approaches to this, such as composing Promises in a special way, are increasingly difficult to pull off when the loading states are located in different components down the tree. + +To solve this, we will import `SuspenseList`: + +```js +import { SuspenseList } from 'react'; +``` + +`` coordinates the "reveal order" of the closest `` nodes below it: + +```js{3,11} +function ProfilePage({ resource }) { + return ( + + + Loading posts...}> + + + Loading fun facts...}> + + + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/black-wind-byilt)** + +The `revealOrder="forwards"` option means that the closest `` nodes inside this list **will only "reveal" their content in the order they appear in the tree -- even if the data for them arrives in a different order**. `` has other interesting modes: try changing `"forwards"` to `"backwards"` or `"together"` and see what happens. + +You can control how many loading states are visible at once with the `tail` prop. If we specify `tail="collapsed"`, we'll see *at most one* fallback at the time. You can play with it [here](https://codesandbox.io/s/adoring-almeida-1zzjh). + +Keep in mind that `` is composable, like anything in React. For example, you can create a grid by putting several `` rows inside a `` table. + +## Next Steps {#next-steps} + +Concurrent Mode offers a powerful UI programming model and a set of new composable primitives to help you orchestrate delightful user experiences. + +It's a result of several years of research and development, but it's not finished. In the section on [adopting Concurrent Mode](/docs/concurrent-mode-adoption.html), we'll describe how you can try it and what you can expect. \ No newline at end of file diff --git a/content/docs/concurrent-mode-reference.md b/content/docs/concurrent-mode-reference.md new file mode 100644 index 000000000..c1183aef9 --- /dev/null +++ b/content/docs/concurrent-mode-reference.md @@ -0,0 +1,203 @@ +--- +id: concurrent-mode-reference +title: Concurrent Mode API Reference (Experimental) +permalink: docs/concurrent-mode-reference.html +prev: concurrent-mode-adoption.html +--- + +>Caution: +> +>This page describes **experimental features that are [not yet available](/docs/concurrent-mode-adoption.html) in a stable release**. Don't rely on experimental builds of React in production apps. These features may change significantly and without a warning before they become a part of React. +> +>This documentation is aimed at early adopters and people who are curious. If you're new to React, don't worry about these features -- you don't need to learn them right now. + +This page is an API reference for the React [Concurrent Mode](/docs/concurrent-mode-intro.html). If you're looking for a guided introduction instead, check out [Concurrent UI Patterns](/docs/concurrent-mode-patterns.html). + +**Note: This is a Community Preview and not the final stable version. There will likely be future changes to these APIs. Use at your own risk!** + +- [Enabling Concurrent Mode](#concurrent-mode) + - [`createRoot`](#createroot) + - [`createBlockingRoot`](#createsyncroot) +- [Suspense](#suspense) + - [`Suspense`](#suspensecomponent) + - [`SuspenseList`](#suspenselist) + - [`useTransition`](#usetransition) + - [`useDeferredValue`](#usedeferredvalue) + +## Enabling Concurrent Mode {#concurrent-mode} + +### `createRoot` {#createroot} + +```js +ReactDOM.createRoot(rootNode).render(); +``` + +Replaces `ReactDOM.render(, rootNode)` and enables Concurrent Mode. + +For more information on Concurrent Mode, check out the [Concurrent Mode documentation.](/docs/concurrent-mode-intro.html) + +### `createBlockingRoot` {#createblockingroot} + +```js +ReactDOM.createBlockingRoot(rootNode).render() +``` + +Replaces `ReactDOM.render(, rootNode)` and enables [Blocking Mode](/docs/concurrent-mode-adoption.html#migration-step-blocking-mode). + +Opting into Concurrent Mode introduces semantic changes to how React works. This means that you can't use Concurrent Mode in just a few components. Because of this, some apps may not be able to migrate directly to Concurrent Mode. + +Blocking Mode only contains a small subset of Concurrent Mode features and is intended as an intermediary migration step for apps that are unable to migrate directly. + +## Suspense API {#suspense} + +### `Suspense` {#suspensecomponent} + +```js + Loading...}> + + + +``` + +`Suspense` lets your components "wait" for something before they can render, showing a fallback while waiting. + +In this example, `ProfileDetails` is waiting for an asynchronous API call to fetch some data. While we wait for `ProfileDetails` and `ProfilePhoto`, we will show the `Loading...` fallback instead. It is important to note that until all children inside `` has loaded, we will continue to show the fallback. + +`Suspense` takes two props: +* **fallback** takes an loading indicator. The fallback is shown until all of the children of the `Suspense` component have finished rendering. +* **unstable_avoidThisFallback** takes a boolean. It tells React whether to "skip" revealing this boundary during the initial load. This API will likely be removed in a future release. + +### `` {#suspenselist} + +```js + + + + + + + + + + + ... + +``` + +`SuspenseList` helps coordinate many components that can suspend by orchestrating the order in which these components are revealed to the user. + +When multiple components need to fetch data, this data may arrive in an unpredictable order. However, if you wrap these items in a `SuspenseList`, React will not show an item in the list until previous items have been displayed (this behavior is adjustable). + +`SuspenseList` takes two props: +* **revealOrder (fowards, backwards, together)** defines the order in which the `SuspenseList` children should be revealed. + * `together` reveals *all* of them when they're ready instead of one by one. +* **tail (collapsed, hidden)** dictates how unloaded items in a `SuspenseList` is shown. + * By default, `SuspenseList` will show all fallbacks in the list. + * `collapsed` shows only the next fallback in the list. + * `hidden` doesn't show any unloaded items. + +Note that `SuspenseList` only operates on the closest `Suspense` and `SuspenseList` components below it. It does not search for boundaries deeper than one level. However, it is possible to nest multiple `SuspenseList` components in each other to build grids. + +### `useTransition` {#usetransition} + +```js +const SUSPENSE_CONFIG = { timeoutMs: 2000 }; + +const [startTransition, isPending] = useTransition(SUSPENSE_CONFIG); +``` + +`useTransition` allows components to avoid undesirable loading states by waiting for content to load before **transitioning to the next screen**. It also allows components to defer slower, data fetching updates until subsequent renders so that more crucial updates can be rendered immediately. + +The `useTransition` hook returns two values in an array. +* `startTransition` is a function that takes a callback. We can use it to tell React which state we want to defer. +* `isPending` is a boolean. It's React's way of informing us whether we're waiting for the transition to finish. + +**If some state update causes a component to suspend, that state update should be wrapped in a transition.** + +```js +const SUSPENSE_CONFIG = {timeoutMs: 2000 }; + +function App() { + const [resource, setResource] = useState(initialResource); + const [startTransition, isPending] = useTransition(SUSPENSE_CONFIG); + return ( + <> + + {isPending ? " Loading..." : null} + }> + + + + ); +} +``` + +In this code, we've wrapped our data fetching with `startTransition`. This allows us to start fetching the profile data right away, while deferring the render of the next profile page and its associated `Spinner` for 2 seconds (the time shown in `timeoutMs`). + +The `isPending` boolean lets React know that our component is transitioning, so we are able to let the user know this by showing some loading text on the previous profile page. + +**For an in-depth look at transitions, you can read [Concurrent UI Patterns](/docs/concurrent-mode-patterns.html#transitions).** + +#### useTransition Config {#usetransition-config} + +```js +const SUSPENSE_CONFIG = { timeoutMs: 2000 }; +``` + +`useTransition` accepts an **optional Suspense Config** with a `timeoutMs`. This timeout (in milliseconds) tells React how long to wait before showing the next state (the new Profile Page in the above example). + +**Note: We recommend that you share Suspense Config between different modules.** + + +### `useDeferredValue` {#usedeferredvalue} + +```js +const deferredValue = useDeferredValue(value, { timeoutMs: 2000 }); +``` + +Returns a deferred version of the value that may "lag behind" it for at most `timeoutMs`. + +This is commonly used to keep the interface responsive when you have something that renders immediately based on user input and something that needs to wait for a data fetch. + +A good example of this is a text input. + +```js +function App() { + const [text, setText] = useState("hello"); + const deferredText = useDeferredValue(text, {timeoutMs: 2000 }); + + return ( +
+ {/* Keep passing the current text to the input */} + + ... + {/* But the list is allowed to "lag behind" when necessary */} + +
+ ); + } +``` + +This allows us to start showing the new text for the `input` immediately, which allows the webpage to feel responsive. Meanwhile, `MySlowList` "lag behind" for up to 2 seconds according to the `timeoutMs` before updating, allowing it to render with the current text in the background. + +**For an in-depth look at deferring values, you can read [Concurrent UI Patterns](/docs/concurrent-mode-patterns.html#deferring-a-value).** + +#### useDeferredValue Config {#usedeferredvalue-config} + +```js +const SUSPENSE_CONFIG = { timeoutMs: 2000 }; +``` + +`useDeferredValue` accepts an **optional Suspense Config** with a `timeoutMs`. This timeout (in milliseconds) tells React how long the deferred value is allowed to lag behind. + +React will always try to use a shorter lag when network and device allows it. \ No newline at end of file diff --git a/content/docs/concurrent-mode-suspense.md b/content/docs/concurrent-mode-suspense.md new file mode 100644 index 000000000..aac9639ca --- /dev/null +++ b/content/docs/concurrent-mode-suspense.md @@ -0,0 +1,675 @@ +--- +id: concurrent-mode-suspense +title: Suspense for Data Fetching (Experimental) +permalink: docs/concurrent-mode-suspense.html +prev: concurrent-mode-intro.html +next: concurrent-mode-patterns.html +--- + +>Caution: +> +>This page describes **experimental features that are [not yet available](/docs/concurrent-mode-adoption.html) in a stable release**. Don't rely on experimental builds of React in production apps. These features may change significantly and without a warning before they become a part of React. +> +>This documentation is aimed at early adopters and people who are curious. If you're new to React, don't worry about these features -- you don't need to learn them right now. + + +React 16.6 added a `` component that lets you "wait" for some code to load and declaratively specify a loading state (like a spinner) while we're waiting: + +```jsx +const ProfilePage = React.lazy(() => import('./ProfilePage')); // Lazy-loaded + +// Show a spinner while the profile is loading +}> + + +``` + +Suspense for Data Fetching is a new feature that lets you also use `` to **declaratively "wait" for anything else, including data.** This page focuses on the data fetching use case, but it can also wait for images, scripts, or other asynchronous work. + +- [What Is Suspense, Exactly?](#what-is-suspense-exactly) + - [What Suspense Is Not](#what-suspense-is-not) + - [What Suspense Lets You Do](#what-suspense-lets-you-do) +- [Using Suspense in Practice](#using-suspense-in-practice) + - [What If I Don’t Use Relay?](#what-if-i-dont-use-relay) + - [For Library Authors](#for-library-authors) +- [Traditional Approaches vs Suspense](#traditional-approaches-vs-suspense) + - [Approach 1: Fetch-on-Render (not using Suspense)](#approach-1-fetch-on-render-not-using-suspense) + - [Approach 2: Fetch-Then-Render (not using Suspense)](#approach-2-fetch-then-render-not-using-suspense) + - [Approach 3: Render-as-You-Fetch (using Suspense)](#approach-3-render-as-you-fetch-using-suspense) + - [We’re Still Figuring This Out](#were-still-figuring-this-out) +- [Suspense and Race Conditions](#suspense-and-race-conditions) + - [Race Conditions with useEffect](#race-conditions-with-useeffect) + - [Race Conditions with componentDidUpdate](#race-conditions-with-componentdidupdate) + - [The Problem](#the-problem) + - [Solving Race Conditions with Suspense](#solving-race-conditions-with-suspense) +- [Handling Errors](#handling-errors) +- [Next Steps](#next-steps) + +## What Is Suspense, Exactly? {#what-is-suspense-exactly} + +Suspense lets your components "wait" for something before they can render. In [this example](https://codesandbox.io/s/frosty-hermann-bztrp), two components wait for an asynchronous API call to fetch some data: + +```js +const resource = fetchProfileData(); + +function ProfilePage() { + return ( + Loading profile...}> + + Loading posts...}> + + + + ); +} + +function ProfileDetails() { + // Try to read user info, although it might not have loaded yet + const user = resource.user.read(); + return

{user.name}

; +} + +function ProfileTimeline() { + // Try to read posts, although they might not have loaded yet + const posts = resource.posts.read(); + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/frosty-hermann-bztrp)** + +This demo is a teaser. Don't worry if it doesn't quite make sense yet. We'll talk more about how it works below. Keep in mind that Suspense is more of a *mechanism*, and particular APIs like `fetchProfileData()` or `resource.posts.read()` in the above example are not very important. If you're curious, you can find their definitions right in the [demo sandbox](https://codesandbox.io/s/frosty-hermann-bztrp). + +Suspense is not a data fetching library. It's a **mechanism for data fetching libraries** to communicate to React that *the data a component is reading is not ready yet*. React can then wait for it to be ready and update the UI. At Facebook, we use Relay and its [new Suspense integration](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay#loading-states-with-suspense). We expect that other libraries like Apollo can provide similar integrations. + +In long term, we intend Suspense to become the primary way to read asynchronous data from components -- no matter where that data is coming from. + +### What Suspense Is Not {#what-suspense-is-not} + +Suspense is significantly different from existing approaches to these problems, so reading about it for the first time often leads to misconceptions. Let's clarify the most common ones: + + * **It is not a data fetching implementation.** It does not assume that you use GraphQL, REST, or any other particular data format, library, transport, or protocol. + + * **It is not a ready-to-use client.** You can't "replace" `fetch` or Relay with Suspense. But you can use a library that's integrated with Suspense (for example, [new Relay APIs](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay#loading-states-with-suspense)). + + * **It does not couple data fetching to the view layer.** It helps orchestrate displaying the loading states in your UI, but it doesn't tie your network logic to React components. + +### What Suspense Lets You Do {#what-suspense-lets-you-do} + +So what's the point of Suspense? There's a few ways we can answer this: + +* **It lets data fetching libraries deeply integrate with React.** If a data fetching library implements Suspense support, using it from React components feels very natural. + +* **It lets you orchestrate intentionally designed loading states.** It doesn't say _how_ the data is fetched, but it lets you closely control the visual loading sequence of your app. + +* **It helps you avoid race conditions.** Even with `await`, asynchronous code is often error-prone. Suspense feels more like reading data *synchronously* — as if it was already loaded. + +## Using Suspense in Practice {#using-suspense-in-practice} + +At Facebook, so far we have only used the Relay integration with Suspense in production. **If you're looking for a practical guide to get started today, [check out the Relay Guide](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay#loading-states-with-suspense)!** It demonstrates patterns that have already worked well for us in production. + +**The code demos on this page use a "fake" API implementation rather than Relay.** This makes them easier to understand if you're not familiar with GraphQL, but they won't tell you the "right way" to build an app with Suspense. This page is more conceptual and is intended to help you see *why* Suspense works in a certain way, and which problems it solves. + +### What If I Don't Use Relay? {#what-if-i-dont-use-relay} + +If you don't use Relay today, you might have to wait before you can really try Suspense in your app. So far, it's the only implementation that we tested in production and are confident in. + +Over the next several months, many libraries will appear with different takes on Suspense APIs. **If you prefer to learn when things are more stable, you might prefer to ignore this work for now, and come back when the Suspense ecosystem is more mature.** + +You can also write your own integration for a data fetching library, if you'd like. + +### For Library Authors {#for-library-authors} + +We expect to see a lot of experimentation in the community with other libraries. There is one important thing to note for data fetching library authors. + +Although it's technically doable, Suspense is **not** currently intended as a way to start fetching data when a component renders. Rather, it lets components express that they're "waiting" for data that is *already being fetched*. Unless you have an idea for a solution that helps prevent waterfalls, we suggest to prefer APIs that favor or enforce fetching before render. The current documentation for [Relay Suspense API](https://relay.dev/docs/en/experimental/api-reference#usepreloadedquery) doesn't yet dive deep into preloading, but we plan to publish more about these techniques in the near future. + +Our messaging about this hasn't been very consistent about this in the past. Suspense for Data Fetching is still experimental, so you can expect our recommendations to change over time as we learn more from production usage and understand the problem space better. + +## Traditional Approaches vs Suspense {#traditional-approaches-vs-suspense} + +We could introduce Suspense without mentioning the popular data fetching approaches. However, this makes it more difficult to see which problems Suspense solves, why these problems are worth solving, and how Suspense is different from the existing solutions. + +Instead, we'll look at Suspense as a logical next step in a sequence of approaches: + +* **Fetch-on-render (for example, `fetch` in `useEffect`):** Start rendering components. Each of these components may trigger data fetching in their effects and lifecycle methods. This approach often leads to "waterfalls". +* **Fetch-then-render (for example, Relay without Suspense):** Start fetching all the data for the next screen as early as possible. When the data is ready, render the new screen. We can't do anything until the data arrives. +* **Render-as-you-fetch (for example, Relay with Suspense):** Start fetching all the required data for the next screen as early as possible, and start rendering the new screen *immediately — before we get a network response*. As data streams in, React retries rendering components that still need data until they're all ready. + +>Note +> +>This is a bit simplified, and in practice solutions tend to use a mix of different approaches. Still, we will look at them in isolation to better contrast their tradeoffs. + +To compare these approaches, we'll implement a profile page with each of them. + +### Approach 1: Fetch-on-Render (not using Suspense) {#approach-1-fetch-on-render-not-using-suspense} + +A common way to fetch data in React apps today is to use an effect: + +```js +// In a function component: +useEffect(() => { + fetchSomething(); +}, []); + +// Or, in a class component: +componentDidMount() { + fetchSomething(); +} +``` + +We call this approach "fetch-on-render" because it doesn't start fetching until *after* the component has rendered on the screen. This leads to a problem known as a "waterfall". + +Consider these `` and `` components: + +```js{4-6,22-24} +function ProfilePage() { + const [user, setUser] = useState(null); + + useEffect(() => { + fetchUser().then(u => setUser(u)); + }, []); + + if (user === null) { + return

Loading profile...

; + } + return ( + <> +

{user.name}

+ + + ); +} + +function ProfileTimeline() { + const [posts, setPosts] = useState(null); + + useEffect(() => { + fetchPosts().then(p => setPosts(p)); + }, []); + + if (posts === null) { + return

Loading posts...

; + } + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/fragrant-glade-8huj6)** + +If you run this code and watch the console logs, you'll notice the sequence is: + +1. We start fetching user details +2. We wait... +3. We finish fetching user details +4. We start fetching posts +5. We wait... +6. We finish fetching posts + +If fetching user details takes three seconds, we'll only *start* fetching the posts after three seconds! That's a "waterfall": an unintentional *sequence* that should have been parallelized. + +Waterfalls are common in code that fetches data on render. They're possible to solve, but as the product grows, many people prefer to use a solution that guards against this problem. + +### Approach 2: Fetch-Then-Render (not using Suspense) {#approach-2-fetch-then-render-not-using-suspense} + +Libraries can prevent waterfalls by offering a more centralized way to do data fetching. For example, Relay solves this problem by moving the information about the data a component needs to statically analyzable *fragments*, which later get composed into a single query. + +On this page, we don't assume knowledge of Relay, so we won't be using it for this example. Instead, we'll write something similar manually by combining our data fetching methods: + +```js +function fetchProfileData() { + return Promise.all([ + fetchUser(), + fetchPosts() + ]).then(([user, posts]) => { + return {user, posts}; + }) +} +``` + +In this example, `` waits for both requests but starts them in parallel: + +```js{1,2,8-13} +// Kick off fetching as early as possible +const promise = fetchProfileData(); + +function ProfilePage() { + const [user, setUser] = useState(null); + const [posts, setPosts] = useState(null); + + useEffect(() => { + promise.then(data => { + setUser(data.user); + setPosts(data.posts); + }); + }, []); + + if (user === null) { + return

Loading profile...

; + } + return ( + <> +

{user.name}

+ + + ); +} + +// The child doesn't trigger fetching anymore +function ProfileTimeline({ posts }) { + if (posts === null) { + return

Loading posts...

; + } + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/wandering-morning-ev6r0)** + +The event sequence now becomes like this: + +1. We start fetching user details +2. We start fetching posts +3. We wait... +4. We finish fetching user details +5. We finish fetching posts + +We've solved the previous network "waterfall", but accidentally introduced a different one. We wait for *all* data to come back with `Promise.all()` inside `fetchProfileData`, so now we can't render profile details until the posts have been fetched too. We have to wait for both. + +Of course, this is possible to fix in this particular example. We could remove the `Promise.all()` call, and wait for both Promises separately. However, this approach gets progressively more difficult as the complexity of our data and component tree grows. It's hard to write reliable components when arbitrary parts of the data tree may be missing or stale. So fetching all data for the new screen and *then* rendering is often a more practical option. + +### Approach 3: Render-as-You-Fetch (using Suspense) {#approach-3-render-as-you-fetch-using-suspense} + +In the previous approach, we fetched data before we called `setState`: + +1. Start fetching +2. Finish fetching +3. Start rendering + +With Suspense, we still start fetching first, but we flip the last two steps around: + +1. Start fetching +2. **Start rendering** +3. **Finish fetching** + +**With Suspense, we don't wait for the response to come back before we start rendering.** In fact, we start rendering *pretty much immediately* after kicking off the network request: + +```js{2,17,23} +// This is not a Promise. It's a special object from our Suspense integration. +const resource = fetchProfileData(); + +function ProfilePage() { + return ( + Loading profile...}> + + Loading posts...}> + + + + ); +} + +function ProfileDetails() { + // Try to read user info, although it might not have loaded yet + const user = resource.user.read(); + return

{user.name}

; +} + +function ProfileTimeline() { + // Try to read posts, although they might not have loaded yet + const posts = resource.posts.read(); + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/frosty-hermann-bztrp)** + +Here's what happens when we render `` on the screen: + +1. We've already kicked off the requests in `fetchProfileData()`. It gave us a special "resource" instead of a Promise. In a realistic example, it would be provided by our data library's Suspense integration, like Relay. +2. React tries to render ``. It returns `` and `` as children. +3. React tries to render ``. It calls `resource.user.read()`. None of the data is fetched yet, so this component "suspends". React skips over it, and tries rendering other components in the tree. +4. React tries to render ``. It calls `resource.posts.read()`. Again, there's no data yet, so this component also "suspends". React skips over it too, and tries rendering other components in the tree. +5. There's nothing left to try rendering. Because `` suspended, React shows the closest `` fallback above it in the tree: `

Loading profile...

`. We're done for now. + +This `resource` object represents the data that isn't there yet, but might eventually get loaded. When we call `read()`, we either get the data, or the component "suspends". + +**As more data streams in, React will retry rendering, and each time it might be able to progress "deeper".** When `resource.user` is fetched, the `` component will render successfully and we'll no longer need the `

Loading profile...

` fallback. Eventually, we'll get all the data, and there will be no fallbacks on the screen. + +This has an interesting implication. Even if we use a GraphQL client that collects all data requirements in a single request, *streaming the response lets us show more content sooner*. Because we render-*as-we-fetch* (as opposed to *after* fetching), if `details` appear in the response earlier than `posts`, we'll be able to "unlock" the outer `` boundary before the response even finishes. We might have missed this earlier, but even the fetch-then-render solution contained a waterfall: between fetching and rendering. Suspense doesn't inherently suffer from this waterfall, and libraries like Relay take advantage of this. + +Note how we eliminated the `if (...)` "is loading" checks from our components. This doesn't only remove boilerplate code, but it also simplifies making quick design changes. For example, if we wanted profile details and posts to always "pop in" together, we could delete the `` boundary between them. Or we could make them independent from each other by giving each *its own* `` boundary. Suspense lets us change the granularity of our loading states and orchestrate their sequencing without invasive changes to our code. + +### We're Still Figuring This Out {#were-still-figuring-this-out} + +Suspense itself as a mechanism is flexible and doesn't have many constraints. Product code needs to be more constrained to ensure no waterfalls, but there are different ways to provide these guarantees. Some questions that we're currently exploring include: + +* Fetching early can be cumbersome to express. How do we make it easier to avoid waterfalls? +* When we fetch data for a page, can the API encourage including data for instant transitions *from* it? +* What is the lifetime of a response? Should caching be global or local? Who manages the cache? +* Can Proxies help express lazy-loaded APIs without inserting `read()` calls everywhere? +* What would the equivalent of composing GraphQL queries look like for arbitrary Suspense data? + +Relay has its own answers to some of these questions. There is certainly more than a single way to do it, and we're excited to see what new ideas the React community comes up with. + +## Suspense and Race Conditions {#suspense-and-race-conditions} + +Race conditions are bugs that happen due to incorrect assumptions about the order in which our code may run. Fetching data in the `useEffect` Hook or in class lifecycle methods like `componentDidUpdate` often leads to them. Suspense can help here, too — let's see how. + +To demonstrate the issue, we will add a top-level `` component that renders our `` with a button that lets us **switch between different profiles**: + +```js{9-11} +function getNextId(id) { + // ... +} + +function App() { + const [id, setId] = useState(0); + return ( + <> + + + + ); +} +``` + +Let's compare how different data fetching strategies deal with this requirement. + +### Race Conditions with `useEffect` {#race-conditions-with-useeffect} + +First, we'll try a version of our original "fetch in effect" example. We'll modify it to pass an `id` parameter from the `` props to `fetchUser(id)` and `fetchPosts(id)`: + +```js{1,5,6,14,19,23,24} +function ProfilePage({ id }) { + const [user, setUser] = useState(null); + + useEffect(() => { + fetchUser(id).then(u => setUser(u)); + }, [id]); + + if (user === null) { + return

Loading profile...

; + } + return ( + <> +

{user.name}

+ + + ); +} + +function ProfileTimeline({ id }) { + const [posts, setPosts] = useState(null); + + useEffect(() => { + fetchPosts(id).then(p => setPosts(p)); + }, [id]); + + if (posts === null) { + return

Loading posts...

; + } + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/nervous-glade-b5sel)** + +Note how we also changed the effect dependencies from `[]` to `[id]` — because we want the effect to re-run when the `id` changes. Otherwise, we wouldn't refetch new data. + +If we try this code, it might seem like it works at first. However, if we randomize the delay time in our "fake API" implementation and press the "Next" button fast enough, we'll see from the console logs that something is going very wrong. **Requests from the previous profiles may sometimes "come back" after we've already switched the profile to another ID -- and in that case they can overwrite the new state with a stale response for a different ID.** + +This problem is possible to fix (you could use the effect cleanup function to either ignore or cancel stale requests), but it's unintuitive and difficult to debug. + +### Race Conditions with `componentDidUpdate` {#race-conditions-with-componentdidupdate} + +One might think that this is a problem specific to `useEffect` or Hooks. Maybe if we port this code to classes or use convenient syntax like `async` / `await`, it will solve the problem? + +Let's try that: + +```js +class ProfilePage extends React.Component { + state = { + user: null, + }; + componentDidMount() { + this.fetchData(this.props.id); + } + componentDidUpdate(prevProps) { + if (prevProps.id !== this.props.id) { + this.fetchData(this.props.id); + } + } + async fetchData(id) { + const user = await fetchUser(id); + this.setState({ user }); + } + render() { + const { id } = this.props; + const { user } = this.state; + if (user === null) { + return

Loading profile...

; + } + return ( + <> +

{user.name}

+ + + ); + } +} + +class ProfileTimeline extends React.Component { + state = { + posts: null, + }; + componentDidMount() { + this.fetchData(this.props.id); + } + componentDidUpdate(prevProps) { + if (prevProps.id !== this.props.id) { + this.fetchData(this.props.id); + } + } + async fetchData(id) { + const posts = await fetchPosts(id); + this.setState({ posts }); + } + render() { + const { posts } = this.state; + if (posts === null) { + return

Loading posts...

; + } + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); + } +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/trusting-clarke-8twuq)** + +This code is deceptively easy to read. + +Unfortunately, neither using a class nor the `async` / `await` syntax helped us solve this problem. This version suffers from exactly the same race conditions, for the same reasons. + +### The Problem {#the-problem} + +React components have their own "lifecycle". They may receive props or update state at any point in time. However, each asynchronous request *also* has its own "lifecycle". It starts when we kick it off, and finishes when we get a response. The difficulty we're experiencing is "synchronizing" several processes in time that affect each other. This is hard to think about. + +### Solving Race Conditions with Suspense {#solving-race-conditions-with-suspense} + +Let's rewrite this example again, but using Suspense only: + +```js +const initialResource = fetchProfileData(0); + +function App() { + const [resource, setResource] = useState(initialResource); + return ( + <> + + + + ); +} + +function ProfilePage({ resource }) { + return ( + Loading profile...}> + + Loading posts...}> + + + + ); +} + +function ProfileDetails({ resource }) { + const user = resource.user.read(); + return

{user.name}

; +} + +function ProfileTimeline({ resource }) { + const posts = resource.posts.read(); + return ( +
    + {posts.map(post => ( +
  • {post.text}
  • + ))} +
+ ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/infallible-feather-xjtbu)** + +In the previous Suspense example, we only had one `resource`, so we held it in a top-level variable. Now that we have multiple resources, we moved it to the ``'s component state: + +```js{4} +const initialResource = fetchProfileData(0); + +function App() { + const [resource, setResource] = useState(initialResource); +``` + +When we click "Next", the `` component kicks off a request for the next profile, and passes *that* object down to the `` component: + +```js{4,8} + <> + + + +``` + +Again, notice that **we're not waiting for the response to set the state. It's the other way around: we set the state (and start rendering) immediately after kicking off a request**. As soon as we have more data, React "fills in" the content inside `` components. + +This code is very readable, but unlike the examples earlier, the Suspense version doesn't suffer from race conditions. You might be wondering why. The answer is that in the Suspense version, we don't have to think about *time* as much in our code. Our original code with race conditions needed to set the state *at the right moment later*, or otherwise it would be wrong. But with Suspense, we set the state *immediately* -- so it's harder to mess it up. + +## Handling Errors {#handling-errors} + +When we write code with Promises, we might use `catch()` to handle errors. How does this work with Suspense, given that we don't *wait* for Promises to start rendering? + +With Suspense, handling fetching errors works the same way as handling rendering errors -- you can render an [error boundary](/docs/error-boundaries.html) anywhere to "catch" errors in components below. + +First, we'll define an error boundary component to use across our project: + +```js +// Error boundaries currently have to be classes. +class ErrorBoundary extends React.Component { + state = { hasError: false, error: null }; + static getDerivedStateFromError(error) { + return { + hasError: true, + error + }; + } + render() { + if (this.state.hasError) { + return this.props.fallback; + } + return this.props.children; + } +} +``` + +And then we can put it anywhere in the tree to catch errors: + +```js{5,9} +function ProfilePage() { + return ( + Loading profile...}> + + Could not fetch posts.}> + Loading posts...}> + + + + + ); +} +``` + +**[Try it on CodeSandbox](https://codesandbox.io/s/adoring-goodall-8wbn7)** + +It would catch both rendering errors *and* errors from Suspense data fetching. We can have as many error boundaries as we like but it's best to [be intentional](https://aweary.dev/fault-tolerance-react/) about their placement. + +## Next Steps {#next-steps} + +We've now covered the basics of Suspense for Data Fetching! Importantly, we now better understand *why* Suspense works this way, and how it fits into the data fetching space. + +Suspense answers some questions, but it also poses new questions of its own: + +* If some component "suspends", does the app freeze? How to avoid this? +* What if we want to show a spinner in a different place than "above" the component in a tree? +* If we intentionally *want* to show an inconsistent UI for a small period time, can we do that? +* Instead of showing a spinner, can we add a visual effect like "greying out" the current screen? +* Why does our [last Suspense example](https://codesandbox.io/s/infallible-feather-xjtbu) log a warning when clicking the "Next" button? + +To answer these questions, we will refer to the next section on [Concurrent UI Patterns](/docs/concurrent-mode-patterns.html). diff --git a/content/docs/nav.yml b/content/docs/nav.yml index 07bf3d9ef..877b8ed7d 100644 --- a/content/docs/nav.yml +++ b/content/docs/nav.yml @@ -108,7 +108,7 @@ title: JS Environment Requirements - id: glossary title: Glossary -- title: Hooks (New) +- title: Hooks isOrdered: true items: - id: hooks-intro @@ -135,6 +135,19 @@ title: Testing Recipes - id: testing-environments title: Testing Environments +- title: Concurrent Mode (Experimental) + isOrdered: true + items: + - id: concurrent-mode-intro + title: Introducing Concurrent Mode + - id: concurrent-mode-suspense + title: Suspense for Data Fetching + - id: concurrent-mode-patterns + title: Concurrent UI Patterns + - id: concurrent-mode-adoption + title: Adopting Concurrent Mode + - id: concurrent-mode-reference + title: Concurrent Mode API Reference - title: Contributing items: - id: how-to-contribute @@ -162,4 +175,4 @@ - id: faq-versioning title: Versioning Policy - id: faq-internals - title: Virtual DOM and Internals + title: Virtual DOM and Internals \ No newline at end of file diff --git a/content/images/docs/cm-steps-simple.png b/content/images/docs/cm-steps-simple.png new file mode 100644 index 0000000000000000000000000000000000000000..e5683f9e6b397efb5941941446455d7eacc0a858 GIT binary patch literal 284535 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�vUUof08D67KI}o(^kaicgn=}J<^J`_dFY*kY%_W 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 Xr>|OHAg8VEf3uRj>b-1P!#Dp2)+eky literal 0 HcmV?d00001 diff --git a/static/_redirects b/static/_redirects index 77b358127..3c683238d 100644 --- a/static/_redirects +++ b/static/_redirects @@ -1,5 +1,6 @@ /html-jsx.html https://magic.reactjs.net/htmltojsx.htm 301 /tips/controlled-input-null-value.html /docs/forms.html#controlled-input-null-value +/concurrent /docs/concurrent-mode-intro.html /hooks /docs/hooks-intro.html /tutorial /tutorial/tutorial.html /your-story https://www.surveymonkey.co.uk/r/MVQV2R9 301 \ No newline at end of file From f324360d58af3a9b63949057a5757443e6078786 Mon Sep 17 00:00:00 2001 From: Juan Date: Thu, 24 Oct 2019 13:00:27 -0400 Subject: [PATCH 08/37] Update links to Relay docs (#2462) --- content/docs/concurrent-mode-suspense.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/concurrent-mode-suspense.md b/content/docs/concurrent-mode-suspense.md index aac9639ca..b79fb6c53 100644 --- a/content/docs/concurrent-mode-suspense.md +++ b/content/docs/concurrent-mode-suspense.md @@ -96,7 +96,7 @@ Suspense is significantly different from existing approaches to these problems, * **It is not a data fetching implementation.** It does not assume that you use GraphQL, REST, or any other particular data format, library, transport, or protocol. - * **It is not a ready-to-use client.** You can't "replace" `fetch` or Relay with Suspense. But you can use a library that's integrated with Suspense (for example, [new Relay APIs](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay#loading-states-with-suspense)). + * **It is not a ready-to-use client.** You can't "replace" `fetch` or Relay with Suspense. But you can use a library that's integrated with Suspense (for example, [new Relay APIs](https://relay.dev/docs/en/experimental/api-reference)). * **It does not couple data fetching to the view layer.** It helps orchestrate displaying the loading states in your UI, but it doesn't tie your network logic to React components. @@ -112,7 +112,7 @@ So what's the point of Suspense? There's a few ways we can answer this: ## Using Suspense in Practice {#using-suspense-in-practice} -At Facebook, so far we have only used the Relay integration with Suspense in production. **If you're looking for a practical guide to get started today, [check out the Relay Guide](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay#loading-states-with-suspense)!** It demonstrates patterns that have already worked well for us in production. +At Facebook, so far we have only used the Relay integration with Suspense in production. **If you're looking for a practical guide to get started today, [check out the Relay Guide](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay)!** It demonstrates patterns that have already worked well for us in production. **The code demos on this page use a "fake" API implementation rather than Relay.** This makes them easier to understand if you're not familiar with GraphQL, but they won't tell you the "right way" to build an app with Suspense. This page is more conceptual and is intended to help you see *why* Suspense works in a certain way, and which problems it solves. From 62775f329eb284c4f87d3707ad11da3b2fe268cf Mon Sep 17 00:00:00 2001 From: swyx Date: Thu, 24 Oct 2019 20:56:22 +0100 Subject: [PATCH 09/37] fix tiny typo on concurrent docs (#2465) --- content/docs/concurrent-mode-patterns.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md index 48e3fa541..c36bb3f03 100644 --- a/content/docs/concurrent-mode-patterns.md +++ b/content/docs/concurrent-mode-patterns.md @@ -183,7 +183,7 @@ function App() { It took us only seven lines of code to add this transition: * We've imported the `useTransition` Hook and used it the component that updates the state. -* We've passed `{timeoutMs: 3000}` to stay on the previous screeen for at most 3 seconds. +* We've passed `{timeoutMs: 3000}` to stay on the previous screen for at most 3 seconds. * We've wrapped our state update into `startTransition` to tell React it's okay to delay it. * We're using `isPending` to communicate the state transition progress to the user. @@ -919,4 +919,4 @@ Keep in mind that `` is composable, like anything in React. For ex Concurrent Mode offers a powerful UI programming model and a set of new composable primitives to help you orchestrate delightful user experiences. -It's a result of several years of research and development, but it's not finished. In the section on [adopting Concurrent Mode](/docs/concurrent-mode-adoption.html), we'll describe how you can try it and what you can expect. \ No newline at end of file +It's a result of several years of research and development, but it's not finished. In the section on [adopting Concurrent Mode](/docs/concurrent-mode-adoption.html), we'll describe how you can try it and what you can expect. From ba4b45cfd070bf09dc8d1d812d1551a39f9f7946 Mon Sep 17 00:00:00 2001 From: Josh Pollock Date: Thu, 24 Oct 2019 15:56:50 -0400 Subject: [PATCH 10/37] Minor typo fix in concurrent mode overview. (#2464) --- content/docs/concurrent-mode-intro.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/concurrent-mode-intro.md b/content/docs/concurrent-mode-intro.md index 43177d05d..dba52653b 100644 --- a/content/docs/concurrent-mode-intro.md +++ b/content/docs/concurrent-mode-intro.md @@ -71,7 +71,7 @@ React uses a heuristic to decide how "urgent" an update is, and lets you adjust There is a common theme around Concurrent Mode features. **Its mission is to help integrate the findings from the Human-Computer Interaction research into real UIs.** -For example, research shows that displaing too many intermediate loading states when transitioning between screens makes a transition feel *slower*. This is why Concurrent Mode shows new loading states on a fixed "schedule" to avoid jarring and too frequent updates. +For example, research shows that displaying too many intermediate loading states when transitioning between screens makes a transition feel *slower*. This is why Concurrent Mode shows new loading states on a fixed "schedule" to avoid jarring and too frequent updates. Similarly, we know from research that interactions like hover and text input need to be handled within a very short period of time, while clicks and page transitions can wait a little longer without feeling laggy. The different "priorities" that Concurrent Mode uses internally roughly correspond to the interaction categories in the human perception research. @@ -86,4 +86,4 @@ On the next pages, you'll learn more details about specific topics: * [Suspense for Data Fetching](/docs/concurrent-mode-suspense.html) describes a new mechanism for fetching data in React components. * [Concurrent UI Patterns](/docs/concurrent-mode-patterns.html) shows some UI patterns made possible by Concurrent Mode and Suspense. * [Adopting Concurrent Mode](/docs/concurrent-mode-adoption.html) explains how you can try Concurrent Mode in your project. -* [Concurrent Mode API Reference](/docs/concurrent-mode-reference.html) documents the new APIs available in experimental builds. \ No newline at end of file +* [Concurrent Mode API Reference](/docs/concurrent-mode-reference.html) documents the new APIs available in experimental builds. From c7c9306d29d15709fa62d5920ade5efba13ae6a3 Mon Sep 17 00:00:00 2001 From: Stephen Hanson Date: Thu, 24 Oct 2019 14:57:25 -0500 Subject: [PATCH 11/37] Fix typo in suspense documentation (#2467) Removes a redundant "about this" in the concurrent-mode suspense docs. --- content/docs/concurrent-mode-suspense.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-suspense.md b/content/docs/concurrent-mode-suspense.md index b79fb6c53..ef6fe4aa8 100644 --- a/content/docs/concurrent-mode-suspense.md +++ b/content/docs/concurrent-mode-suspense.md @@ -130,7 +130,7 @@ We expect to see a lot of experimentation in the community with other libraries. Although it's technically doable, Suspense is **not** currently intended as a way to start fetching data when a component renders. Rather, it lets components express that they're "waiting" for data that is *already being fetched*. Unless you have an idea for a solution that helps prevent waterfalls, we suggest to prefer APIs that favor or enforce fetching before render. The current documentation for [Relay Suspense API](https://relay.dev/docs/en/experimental/api-reference#usepreloadedquery) doesn't yet dive deep into preloading, but we plan to publish more about these techniques in the near future. -Our messaging about this hasn't been very consistent about this in the past. Suspense for Data Fetching is still experimental, so you can expect our recommendations to change over time as we learn more from production usage and understand the problem space better. +Our messaging about this hasn't been very consistent in the past. Suspense for Data Fetching is still experimental, so you can expect our recommendations to change over time as we learn more from production usage and understand the problem space better. ## Traditional Approaches vs Suspense {#traditional-approaches-vs-suspense} From ad3a1d568e9427b2423d9eb0de99eaab6b79b012 Mon Sep 17 00:00:00 2001 From: Jakub Biesiada Date: Thu, 24 Oct 2019 21:59:16 +0200 Subject: [PATCH 12/37] Fix typo (#2469) --- content/docs/concurrent-mode-adoption.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-adoption.md b/content/docs/concurrent-mode-adoption.md index dc30b03e6..2a76a758a 100644 --- a/content/docs/concurrent-mode-adoption.md +++ b/content/docs/concurrent-mode-adoption.md @@ -1,6 +1,6 @@ --- id: concurrent-mode-adoption -title: Adopting Concurrent More (Experimental) +title: Adopting Concurrent Mode (Experimental) permalink: docs/concurrent-mode-adoption.html prev: concurrent-mode-patterns.html next: concurrent-mode-reference.html From 2e70fb54578d9d548a73aa7e8ac8ae3a1f390f4f Mon Sep 17 00:00:00 2001 From: Matt Wood Date: Thu, 24 Oct 2019 15:01:04 -0500 Subject: [PATCH 13/37] Fix minor typo in concurrent mode adoption docs (#2472) --- content/docs/concurrent-mode-adoption.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-adoption.md b/content/docs/concurrent-mode-adoption.md index 2a76a758a..972635ca0 100644 --- a/content/docs/concurrent-mode-adoption.md +++ b/content/docs/concurrent-mode-adoption.md @@ -93,7 +93,7 @@ We think it is better to offer a [gradual migration strategy](/docs/faq-versioni In practice, we expect that most apps using Legacy Mode today should be able to migrate at least to the Blocking Mode (if not Concurrent Mode). This fragmentation can be annoying for libraries that aim to support all Modes in the short term. However, gradually moving the ecosystem away from the Legacy Mode will also *solve* problems that affect major libraries in the React ecosystem, such as [confusing Suspense behavior when reading layout](https://github.com/facebook/react/issues/14536) and [lack of consistent batching guarantees](https://github.com/facebook/react/issues/15080). There's a number of bugs that can't be fixed in Legacy Mode without changing semantics, but don't exist in Blocking and Concurrent Modes. -You can think of the Blocking Mode as of a "gracefully degraded" version of the Concurrent Mode. **As a result, in longer term we should be able to converge and stop thinking about different Modes altogether.** But for now, Modes are an important migration strategy. They let everyone decide when a migration is worth it, and upgrade at their own pace. +You can think of the Blocking Mode as a "gracefully degraded" version of the Concurrent Mode. **As a result, in longer term we should be able to converge and stop thinking about different Modes altogether.** But for now, Modes are an important migration strategy. They let everyone decide when a migration is worth it, and upgrade at their own pace. ### Feature Comparison {#feature-comparison} From 43d8e5fb7f0dcfcc1d9a423ac24610aea2ac386b Mon Sep 17 00:00:00 2001 From: Matt Wood Date: Thu, 24 Oct 2019 15:01:51 -0500 Subject: [PATCH 14/37] Fix minor typo in concurrent mode reference docs (#2473) --- content/docs/concurrent-mode-reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/concurrent-mode-reference.md b/content/docs/concurrent-mode-reference.md index c1183aef9..af9e06dc0 100644 --- a/content/docs/concurrent-mode-reference.md +++ b/content/docs/concurrent-mode-reference.md @@ -64,7 +64,7 @@ Blocking Mode only contains a small subset of Concurrent Mode features and is in In this example, `ProfileDetails` is waiting for an asynchronous API call to fetch some data. While we wait for `ProfileDetails` and `ProfilePhoto`, we will show the `Loading...` fallback instead. It is important to note that until all children inside `` has loaded, we will continue to show the fallback. `Suspense` takes two props: -* **fallback** takes an loading indicator. The fallback is shown until all of the children of the `Suspense` component have finished rendering. +* **fallback** takes a loading indicator. The fallback is shown until all of the children of the `Suspense` component have finished rendering. * **unstable_avoidThisFallback** takes a boolean. It tells React whether to "skip" revealing this boundary during the initial load. This API will likely be removed in a future release. ### `` {#suspenselist} @@ -200,4 +200,4 @@ const SUSPENSE_CONFIG = { timeoutMs: 2000 }; `useDeferredValue` accepts an **optional Suspense Config** with a `timeoutMs`. This timeout (in milliseconds) tells React how long the deferred value is allowed to lag behind. -React will always try to use a shorter lag when network and device allows it. \ No newline at end of file +React will always try to use a shorter lag when network and device allows it. From a89650a7fa18e39204fbcfa3ba382b75b7188d3c Mon Sep 17 00:00:00 2001 From: Thomas Gassmann Date: Thu, 24 Oct 2019 22:05:21 +0200 Subject: [PATCH 15/37] =?UTF-8?q?Close=20missing=20suspense=20tags=20in=20?= =?UTF-8?q?documentation=20for=20concurrent=20UI=E2=80=A6=20(#2475)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/docs/concurrent-mode-patterns.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md index c36bb3f03..2f4e49961 100644 --- a/content/docs/concurrent-mode-patterns.md +++ b/content/docs/concurrent-mode-patterns.md @@ -390,6 +390,7 @@ After the click, React started rendering the next screen: + ``` @@ -403,6 +404,7 @@ Both `` and `` need data to render, so they sus {/* suspends! */} Loading posts...}> {/* suspends! */} + ``` @@ -419,6 +421,7 @@ When a component suspends, React needs to show the closest fallback. But the clo {/* suspends! */} + ``` @@ -437,6 +440,7 @@ As we load more data, React will retry rendering, and `` can ren

Loading posts...

}> {/* suspends! */} +
``` From 1189e19baa363262368733df24e90c15d4db5200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludwig=20B=C3=A4cklund?= Date: Thu, 24 Oct 2019 22:06:24 +0200 Subject: [PATCH 16/37] Fix typo in concurrent-mode-patterns.md (#2478) --- content/docs/concurrent-mode-patterns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md index 2f4e49961..29bff0234 100644 --- a/content/docs/concurrent-mode-patterns.md +++ b/content/docs/concurrent-mode-patterns.md @@ -846,7 +846,7 @@ Even though there is an improvement in responsiveness, this example isn't as com ### SuspenseList {#suspenselist} -`` is the last pattern that's related to orchestracting loading states. +`` is the last pattern that's related to orchestrating loading states. Consider this example: From cd91e9d40d89a8d9aaa5cfa0932d7f681044baed Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Thu, 24 Oct 2019 23:15:20 +0300 Subject: [PATCH 17/37] Fix typo --- content/docs/concurrent-mode-patterns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md index 29bff0234..335572c68 100644 --- a/content/docs/concurrent-mode-patterns.md +++ b/content/docs/concurrent-mode-patterns.md @@ -727,7 +727,7 @@ By default, React always renders a consistent UI. Consider code like this: React guarantees that whenever we look at these components on the screen, they will reflect data from the same `user`. If a different `user` is passed down because of a state update, you would see them changing together. You can't ever record a screen and find a frame where they would show values from different `user`s. (If you ever run into a case like this, file a bug!) -This makes sense in the vast majority of situations. Inconsistent UI is confusing and can mislead users. (For example, it would be terrible if a messager's Send button and the conversation picker pane "disagreed" about which thread is currently selected.) +This makes sense in the vast majority of situations. Inconsistent UI is confusing and can mislead users. (For example, it would be terrible if a messenger's Send button and the conversation picker pane "disagreed" about which thread is currently selected.) However, sometimes it might be helpful to intentionally introduce an inconsistency. We could do it manually by "splitting" the state like above, but React also offers a built-in Hook for this: From 6d9467a4d40cf7bd36c7f4823e57aea4f0c64a91 Mon Sep 17 00:00:00 2001 From: Vetrivel Chinnasamy Date: Fri, 25 Oct 2019 07:50:55 +0530 Subject: [PATCH 18/37] added new reactjs hangman game (#2466) --- content/community/examples.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/community/examples.md b/content/community/examples.md index 55541310b..8c9586762 100644 --- a/content/community/examples.md +++ b/content/community/examples.md @@ -25,3 +25,4 @@ There are many example projects created by the React community. Feel free to add * **[Speedy math](https://github.com/pankajladhar/speedy-math)** An application which allows kids to practice basic Mathematics i.e Addition, Subtraction, Multiply, Comparison. It is a PWA (Progressive web app) with offline support and install as App features. * **[Unit Converter](https://github.com/KarthikeyanRanasthala/react-unit-converter)** Minimal Yet Responsive Unit Converter Built With React, Material-UI & Convert-Units. * **[BMI Calculator](https://github.com/GermaVinsmoke/bmi-calculator)** A React Hooks app for calculating BMI +* **[ReactJS Hangman Game](https://github.com/vetrivelcsamy/reactjs-hangman)** ReactJS Hangman Game Find a Programming Language. From a57f347ca92d7aa22180b3b1287d22277b75f71b Mon Sep 17 00:00:00 2001 From: Joe Hoyle Date: Fri, 25 Oct 2019 11:06:09 +0200 Subject: [PATCH 19/37] Add "the" in "In long term" (#2481) --- content/docs/concurrent-mode-suspense.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-suspense.md b/content/docs/concurrent-mode-suspense.md index ef6fe4aa8..f31adb5f4 100644 --- a/content/docs/concurrent-mode-suspense.md +++ b/content/docs/concurrent-mode-suspense.md @@ -88,7 +88,7 @@ This demo is a teaser. Don't worry if it doesn't quite make sense yet. We'll tal Suspense is not a data fetching library. It's a **mechanism for data fetching libraries** to communicate to React that *the data a component is reading is not ready yet*. React can then wait for it to be ready and update the UI. At Facebook, we use Relay and its [new Suspense integration](https://relay.dev/docs/en/experimental/a-guided-tour-of-relay#loading-states-with-suspense). We expect that other libraries like Apollo can provide similar integrations. -In long term, we intend Suspense to become the primary way to read asynchronous data from components -- no matter where that data is coming from. +In the long term, we intend Suspense to become the primary way to read asynchronous data from components -- no matter where that data is coming from. ### What Suspense Is Not {#what-suspense-is-not} From f415af7327df3e8c78b85fe4efb4683771b5e79c Mon Sep 17 00:00:00 2001 From: David Khourshid Date: Fri, 25 Oct 2019 05:11:18 -0400 Subject: [PATCH 20/37] Update concurrent-mode-patterns.md (#2482) Fix typo: `timeout:` to `timeoutMs:` --- content/docs/concurrent-mode-patterns.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md index 335572c68..8f2b1d3fc 100644 --- a/content/docs/concurrent-mode-patterns.md +++ b/content/docs/concurrent-mode-patterns.md @@ -249,7 +249,7 @@ However, the experience feels really jarring. We were browsing a page, but it go function ProfilePage() { const [startTransition, isPending] = useTransition({ // Wait 10 seconds before fallback - timeout: 10000 + timeoutMs: 10000 }); const [resource, setResource] = useState(initialResource); @@ -289,7 +289,7 @@ This can lead to a lot of repetitive code across components. This is why **we ge ```js{7-9,20,24} function Button({ children, onClick }) { const [startTransition, isPending] = useTransition({ - timeout: 10000 + timeoutMs: 10000 }); function handleClick() { From 906378767eb12a0de66b94e3a99fdd413058beb2 Mon Sep 17 00:00:00 2001 From: Glenn Reyes Date: Fri, 25 Oct 2019 11:48:23 +0200 Subject: [PATCH 21/37] Add missing verb (#2483) --- content/docs/concurrent-mode-patterns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md index 8f2b1d3fc..7be9f5bf6 100644 --- a/content/docs/concurrent-mode-patterns.md +++ b/content/docs/concurrent-mode-patterns.md @@ -360,7 +360,7 @@ At the very end, we have the **Complete** state. That's where we want to eventua But before our screen can be Complete, we might need to load some data or code. When we're on the next screen, but some parts of it are still loading, we call that a **Skeleton** state. -Finally, there two primary ways that lead us to the Skeleton state. We will illustrate the difference between them with a concrete example. +Finally, there are two primary ways that lead us to the Skeleton state. We will illustrate the difference between them with a concrete example. ### Default: Receded → Skeleton → Complete {#default-receded-skeleton-complete} From 8a374d984e8068d03aa63915b6ea06a573dccdd2 Mon Sep 17 00:00:00 2001 From: Shengyu Huang Date: Fri, 25 Oct 2019 13:04:14 +0200 Subject: [PATCH 22/37] add example project radix converter (#2486) --- content/community/examples.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/community/examples.md b/content/community/examples.md index 8c9586762..d330ef0bf 100644 --- a/content/community/examples.md +++ b/content/community/examples.md @@ -26,3 +26,4 @@ There are many example projects created by the React community. Feel free to add * **[Unit Converter](https://github.com/KarthikeyanRanasthala/react-unit-converter)** Minimal Yet Responsive Unit Converter Built With React, Material-UI & Convert-Units. * **[BMI Calculator](https://github.com/GermaVinsmoke/bmi-calculator)** A React Hooks app for calculating BMI * **[ReactJS Hangman Game](https://github.com/vetrivelcsamy/reactjs-hangman)** ReactJS Hangman Game Find a Programming Language. +* **[Radix Converter](https://github.com/kumom/radix-converter)** A small tool that converts numbers in radix 2 to 36 with arbitrary precision. From 85079f4fa0976d4c1b62dc98830153834d07c430 Mon Sep 17 00:00:00 2001 From: SToneX Date: Fri, 25 Oct 2019 19:05:09 +0800 Subject: [PATCH 23/37] Fix `createblockingroot` link in concurrent-mode-reference.md (#2485) Fix #createblockingroot link --- content/docs/concurrent-mode-reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-reference.md b/content/docs/concurrent-mode-reference.md index af9e06dc0..35e9cbeb3 100644 --- a/content/docs/concurrent-mode-reference.md +++ b/content/docs/concurrent-mode-reference.md @@ -17,7 +17,7 @@ This page is an API reference for the React [Concurrent Mode](/docs/concurrent-m - [Enabling Concurrent Mode](#concurrent-mode) - [`createRoot`](#createroot) - - [`createBlockingRoot`](#createsyncroot) + - [`createBlockingRoot`](#createblockingroot) - [Suspense](#suspense) - [`Suspense`](#suspensecomponent) - [`SuspenseList`](#suspenselist) From 2231a7c4ef2995930e933f3db7cd05e66ff64e1b Mon Sep 17 00:00:00 2001 From: Bruno Bonamin Date: Fri, 25 Oct 2019 08:28:52 -0300 Subject: [PATCH 24/37] Fix doc referencing incorrect variable `details` (#2487) The variable name that's loading is called `user` --- content/docs/concurrent-mode-suspense.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-suspense.md b/content/docs/concurrent-mode-suspense.md index f31adb5f4..6c1beea32 100644 --- a/content/docs/concurrent-mode-suspense.md +++ b/content/docs/concurrent-mode-suspense.md @@ -360,7 +360,7 @@ This `resource` object represents the data that isn't there yet, but might event **As more data streams in, React will retry rendering, and each time it might be able to progress "deeper".** When `resource.user` is fetched, the `` component will render successfully and we'll no longer need the `

Loading profile...

` fallback. Eventually, we'll get all the data, and there will be no fallbacks on the screen. -This has an interesting implication. Even if we use a GraphQL client that collects all data requirements in a single request, *streaming the response lets us show more content sooner*. Because we render-*as-we-fetch* (as opposed to *after* fetching), if `details` appear in the response earlier than `posts`, we'll be able to "unlock" the outer `` boundary before the response even finishes. We might have missed this earlier, but even the fetch-then-render solution contained a waterfall: between fetching and rendering. Suspense doesn't inherently suffer from this waterfall, and libraries like Relay take advantage of this. +This has an interesting implication. Even if we use a GraphQL client that collects all data requirements in a single request, *streaming the response lets us show more content sooner*. Because we render-*as-we-fetch* (as opposed to *after* fetching), if `user` appear in the response earlier than `posts`, we'll be able to "unlock" the outer `` boundary before the response even finishes. We might have missed this earlier, but even the fetch-then-render solution contained a waterfall: between fetching and rendering. Suspense doesn't inherently suffer from this waterfall, and libraries like Relay take advantage of this. Note how we eliminated the `if (...)` "is loading" checks from our components. This doesn't only remove boilerplate code, but it also simplifies making quick design changes. For example, if we wanted profile details and posts to always "pop in" together, we could delete the `` boundary between them. Or we could make them independent from each other by giving each *its own* `` boundary. Suspense lets us change the granularity of our loading states and orchestrate their sequencing without invasive changes to our code. From cf578f822b6f93b82b6f63f8672c1b51f280fd88 Mon Sep 17 00:00:00 2001 From: Jonathan Bouchard Date: Fri, 25 Oct 2019 17:50:05 -0400 Subject: [PATCH 25/37] Missing highlighted line in concurrent mode patterns example (#2490) --- content/docs/concurrent-mode-patterns.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/concurrent-mode-patterns.md b/content/docs/concurrent-mode-patterns.md index 7be9f5bf6..b09168c50 100644 --- a/content/docs/concurrent-mode-patterns.md +++ b/content/docs/concurrent-mode-patterns.md @@ -152,7 +152,7 @@ Now, this feels a lot better! When we click Next, it gets disabled because click Let's take another look at all the changes we've made since the [original example](https://codesandbox.io/s/infallible-feather-xjtbu): -```js{3-5,11,14,19} +```js{3-5,9,11,14,19} function App() { const [resource, setResource] = useState(initialResource); const [startTransition, isPending] = useTransition({ @@ -185,7 +185,7 @@ It took us only seven lines of code to add this transition: * We've imported the `useTransition` Hook and used it the component that updates the state. * We've passed `{timeoutMs: 3000}` to stay on the previous screen for at most 3 seconds. * We've wrapped our state update into `startTransition` to tell React it's okay to delay it. -* We're using `isPending` to communicate the state transition progress to the user. +* We're using `isPending` to communicate the state transition progress to the user and to disable the button. As a result, clicking "Next" doesn't perform an immediate state transition to an "undesirable" loading state, but instead stays on the previous screen and communicates progress there. From 60bfdd6b3249e758d47fb31e17c92ca4b7f8f7f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Goyet?= Date: Sat, 26 Oct 2019 02:35:41 +0200 Subject: [PATCH 26/37] Update meetups.md adding Nantes (France ) meetup (#2494) --- content/community/meetups.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/community/meetups.md b/content/community/meetups.md index 78bcf1dd6..f12847f74 100644 --- a/content/community/meetups.md +++ b/content/community/meetups.md @@ -50,6 +50,7 @@ Do you have a local React.js meetup? Add it here! (Please keep the list alphabet * [React.JS Girls London](https://www.meetup.com/ReactJS-Girls-London/) ## France {#france} +* [Nantes](https://www.meetup.com/React-Nantes/) * [Lille](https://www.meetup.com/ReactBeerLille/) * [Paris](https://www.meetup.com/ReactJS-Paris/) From 4f43c0fa74955d063fa541704f1fe269339a6bbf Mon Sep 17 00:00:00 2001 From: imed jaberi <43971542+3imed-jaberi@users.noreply.github.com> Date: Sat, 26 Oct 2019 05:37:02 +0200 Subject: [PATCH 27/37] update catalan status .. (#2491) --- content/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/languages.yml b/content/languages.yml index 499c8ea4a..1756ade25 100644 --- a/content/languages.yml +++ b/content/languages.yml @@ -26,7 +26,7 @@ - name: Catalan translated_name: Català code: ca - status: 0 + status: 1 - name: German translated_name: Deutsch code: de From 3159be9938b6b374670c55f2d235ac9b3fae1d96 Mon Sep 17 00:00:00 2001 From: hirofumi i Date: Sun, 27 Oct 2019 05:10:30 +0900 Subject: [PATCH 28/37] Fix typo on concurrent mode api (#2498) --- content/docs/concurrent-mode-reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/concurrent-mode-reference.md b/content/docs/concurrent-mode-reference.md index 35e9cbeb3..966ccf6ee 100644 --- a/content/docs/concurrent-mode-reference.md +++ b/content/docs/concurrent-mode-reference.md @@ -89,7 +89,7 @@ In this example, `ProfileDetails` is waiting for an asynchronous API call to fet When multiple components need to fetch data, this data may arrive in an unpredictable order. However, if you wrap these items in a `SuspenseList`, React will not show an item in the list until previous items have been displayed (this behavior is adjustable). `SuspenseList` takes two props: -* **revealOrder (fowards, backwards, together)** defines the order in which the `SuspenseList` children should be revealed. +* **revealOrder (forwards, backwards, together)** defines the order in which the `SuspenseList` children should be revealed. * `together` reveals *all* of them when they're ready instead of one by one. * **tail (collapsed, hidden)** dictates how unloaded items in a `SuspenseList` is shown. * By default, `SuspenseList` will show all fallbacks in the list. From fab0b46659b16be28ec36b390ff0eb2f8ec2ac2a Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Sat, 26 Oct 2019 23:11:28 +0300 Subject: [PATCH 29/37] Update concurrent-mode-reference.md --- content/docs/concurrent-mode-reference.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/docs/concurrent-mode-reference.md b/content/docs/concurrent-mode-reference.md index 966ccf6ee..81f333811 100644 --- a/content/docs/concurrent-mode-reference.md +++ b/content/docs/concurrent-mode-reference.md @@ -53,10 +53,10 @@ Blocking Mode only contains a small subset of Concurrent Mode features and is in ### `Suspense` {#suspensecomponent} ```js - Loading...}> - - - +Loading...}> + + + ``` `Suspense` lets your components "wait" for something before they can render, showing a fallback while waiting. From cbd34013d10882b231c8bc3ec5f0efcb4ca54336 Mon Sep 17 00:00:00 2001 From: winwiz1 Date: Sun, 27 Oct 2019 11:04:24 +1100 Subject: [PATCH 30/37] Update tools-starter-kits.md (#2497) * Update tools-starter-kits.md Please consider adding Crisp React. Thank you. * Update tools-starter-kits.md Thanks for the amendment. Co-Authored-By: Alexey Pyltsyn --- content/community/tools-starter-kits.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/community/tools-starter-kits.md b/content/community/tools-starter-kits.md index bfd3b89fc..47d64b841 100644 --- a/content/community/tools-starter-kits.md +++ b/content/community/tools-starter-kits.md @@ -36,4 +36,6 @@ Ready to grow boilerplate with react-router, redux, saga, webpack 3, jest w/ cov * **[EDGE Platform](https://github.com/sebastian-software/edge)** Universal React/SSR + Apollo GraphQL + JS/CSS Code Splitting + Fine-Tuned Webpack + Localization/Internationalization. Most things are external dependencies. Boilerplate available. * **[bae](https://github.com/siddharthkp/bae)** Zero config toolkit. SSR (with data fetching) + routing + streaming + styling (with styled-components) + HMR out of the box. * **[breko-hub](https://github.com/tomatau/breko-hub)** A production ready boilerplate for universal react applications. Complete with code splitting, server render (using koa), redux, sagas, debugging, hot-reloading (live updates on the server), css-modules, scss, super fast integration tests and unit tests. There's also a big focus on clean code and smaller files. - * **[appseed](https://github.com/rosoftdeveloper/appseed)** A production ready boilerplate for UI-Ready react applications. The frontend can be bundled with various backends: Flask, Laravel, Express. + * **[appseed](https://github.com/rosoftdeveloper/appseed)** A production ready boilerplate for UI-Ready react applications. The frontend can be bundled with various backends: Flask, Laravel, Express. + * **[Crisp React](https://github.com/winwiz1/crisp-react)** A boilerplate for React + Express integration in TypeScript. Written for performance and debugging convenience. Supports multiple SPAs. Production ready. + From 18327d46c522a0b49381cc39a89c62db50b0e570 Mon Sep 17 00:00:00 2001 From: Jhon Mike Date: Sun, 27 Oct 2019 05:30:04 -0300 Subject: [PATCH 31/37] Formateed react-v16.9.0 post (#2501) * format post react-v16.9.0 * running yarn check-all --- content/blog/2019-08-08-react-v16.9.0.md | 19 +++++++++---------- content/blog/2019-08-15-new-react-devtools.md | 12 ++++++------ content/docs/reference-profiler.md | 4 ++-- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/content/blog/2019-08-08-react-v16.9.0.md b/content/blog/2019-08-08-react-v16.9.0.md index e83e9375a..9442f2b40 100644 --- a/content/blog/2019-08-08-react-v16.9.0.md +++ b/content/blog/2019-08-08-react-v16.9.0.md @@ -48,7 +48,7 @@ const userProfile = { }; // This will now warn:
Profile -```` +``` **In React 16.9,** this pattern continues to work, but it will log a warning. If you use `javascript:` URLs for logic, try to use React event handlers instead. (As a last resort, you can circumvent the protection with [`dangerouslySetInnerHTML`](/docs/dom-elements.html#dangerouslysetinnerhtml), but it is highly discouraged and often leads to security holes.) @@ -70,7 +70,6 @@ This pattern was almost never used in the wild, and supporting it causes React t We don't expect most codebases to be affected by this. - ## New Features {#new-features} ### Async [`act()`](/docs/test-utils.html#act) for Testing {#async-act-for-testing} @@ -89,7 +88,7 @@ An update to SomeComponent inside a test was not wrapped in act(...). await act(async () => { // ... }); -```` +``` This solves the remaining cases where you couldn't use `act()` before, such as when the state update was inside an asynchronous function. As a result, **you should be able to fix all the remaining `act()` warnings in your tests now.** @@ -209,12 +208,12 @@ Refer to the documentation for [detailed installation instructions](/docs/instal ### React {#react} - * Add `` API for gathering performance measurements programmatically. ([@bvaughn](https://github.com/bvaughn) in [#15172](https://github.com/facebook/react/pull/15172)) +* Add `` API for gathering performance measurements programmatically. ([@bvaughn](https://github.com/bvaughn) in [#15172](https://github.com/facebook/react/pull/15172)) * Remove `unstable_ConcurrentMode` in favor of `unstable_createRoot`. ([@acdlite](https://github.com/acdlite) in [#15532](https://github.com/facebook/react/pull/15532)) - ### React DOM +### React DOM {#react-dom} - * Deprecate old names for the `UNSAFE_*` lifecycle methods. ([@bvaughn](https://github.com/bvaughn) in [#15186](https://github.com/facebook/react/pull/15186) and [@threepointone](https://github.com/threepointone) in [#16103](https://github.com/facebook/react/pull/16103)) +* Deprecate old names for the `UNSAFE_*` lifecycle methods. ([@bvaughn](https://github.com/bvaughn) in [#15186](https://github.com/facebook/react/pull/15186) and [@threepointone](https://github.com/threepointone) in [#16103](https://github.com/facebook/react/pull/16103)) * Deprecate `javascript:` URLs as a common attack surface. ([@sebmarkbage](https://github.com/sebmarkbage) in [#15047](https://github.com/facebook/react/pull/15047)) * Deprecate uncommon "module pattern" (factory) components. ([@sebmarkbage](https://github.com/sebmarkbage) in [#15145](https://github.com/facebook/react/pull/15145)) * Add support for the `disablePictureInPicture` attribute on `