From c7a61e6abad43fb17e49b38eb910b6c42fabeb78 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Wed, 7 Mar 2018 11:33:19 -0800 Subject: [PATCH] Imported StrictMode docs (and examples) from PR #596 --- content/docs/strict-mode.md | 88 ++++++++++++++++++ .../strict-mode-unsafe-lifecycles-warning.png | Bin 0 -> 53348 bytes examples/strict-mode/enabling-strict-mode.js | 18 ++++ .../side-effects-in-constructor.js | 7 ++ 4 files changed, 113 insertions(+) create mode 100644 content/docs/strict-mode.md create mode 100644 content/images/blog/strict-mode-unsafe-lifecycles-warning.png create mode 100644 examples/strict-mode/enabling-strict-mode.js create mode 100644 examples/strict-mode/side-effects-in-constructor.js diff --git a/content/docs/strict-mode.md b/content/docs/strict-mode.md new file mode 100644 index 000000000..ec89a8d14 --- /dev/null +++ b/content/docs/strict-mode.md @@ -0,0 +1,88 @@ +--- +id: strict-mode +title: StrictMode +permalink: docs/strict-mode.html +--- + +`StrictMode` is a tool for highlighting potential problems in an application. Like `Fragment`, `StrictMode` does not render any visible UI. It activates additional checks and warnings for its descendants. + +> Note: +> +> Strict mode checks are run in development mode only; _they do not impact the production build_. + +You can enable strict mode for any part of your application. For example: +`embed:strict-mode/enabling-strict-mode.js` + +In the above example, strict mode checks will *not* be run against the `Header` and `Footer` components. However, `ComponentOne` and `ComponentTwo`, as well as all of their descendants, will have the checks. + +`StrictMode` currently helps with: +* [Identifying components with unsafe lifecycles](#identifying-unsafe-lifecycles) +* [Warning about legacy string ref API usage](#warning-about-legacy-string-ref-api-usage) +* [Detecting unexpected side effects](#detecting-unexpected-side-effects) + +Additional functionality will be added with future releases of React. + +### Identifying unsafe lifecycles + +As explained [in this blog post](/blog/2018/02/07/update-on-async-rendering.html), certain legacy lifecycle methods are unsafe for use in async React applications. However, if your application uses third party libraries, it can be difficult to ensure that these lifecycles aren't being used. Fortunately, strict mode can help with this! + +When strict mode is enabled, React compiles a list of all class components using the unsafe lifecycles, and logs a warning message with information about these components, like so: + +![](../images/blog/strict-mode-unsafe-lifecycles-warning.png) + +Addressing the issues identified by strict mode _now_ will make it easier for you to take advantage of async rendering in future releases of React. + +### Warning about legacy string ref API usage + +Previously, React provided two ways for managing refs: the legacy string ref API and the callback API. Although the string ref API was the more convenient of the two, it had [several downsides](https://github.com/facebook/react/issues/1373) and so our official recomendation was to [use the callback form instead](https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs). + +React 16.3 added a third option that offers the convenience of a string ref without any of the downsides: +`embed:16-3-release-blog-post/create-ref-example.js` + +Since object refs were largely added as a replacement for string refs, strict mode now warns about usage of string refs. + +> **Note:** +> +> Callback refs will continue to be supported in addition to the new `createRef` API. +> +> You don't need to replace callback refs in your components. They are slightly more flexible, so they will remain as an advanced feature. + +[Learn more about the new `createRef` API here.](/docs/refs-and-the-dom.html) + +### Detecting unexpected side effects + +Conceptually, React does work in two phases: +* The **render** phase determines what changes need to be made to e.g. the DOM. During this phase, React calls `render` and then compares the result to the previous render. +* The **commit** phase is when React applies any changes. (In the case of React DOM, this is when React inserts, updates, and removes DOM nodes.) React also calls lifecycles like `componentDidMount` and `componentDidUpdate` during this phase. + +The commit phase is usually very fast, but rendering can be slow. For this reason, the upcoming async mode (which is not enabled by default yet) breaks the rendering work into pieces, pausing and resuming the work to avoid blocking the browser. This means that React may invoke render phase lifecycles more than once before committing, or it may invoke them without committing at all (because of an error or a higher priority interruption). + +Render phase lifecycles include the following class component methods: +* `constructor` +* `componentWillMount` +* `componentWillReceiveProps` +* `componentWillUpdate` +* `getDerivedStateFromProps` +* `shouldComponentUpdate` +* `render` +* `setState` updater functions (the first argument) + +Because the above methods might be called more than once, it's important that they do not contain side-effects. Ignoring this rule can lead to a variety of problems, including memory leaks and invalid application state. Unfortunately, it can be difficult to detect these problems as they can often be [non-deterministic](https://en.wikipedia.org/wiki/Deterministic_algorithm). + +Strict mode can't automatically detect side effects for you, but it can help you spot them by making them a little more deterministic. This is done by intentionally double-invoking the following methods: + +* Class component `constructor` method +* The `render` method +* `setState` updater functions (the first argument) +* The static `getDerivedStateFromProps` lifecycle + +> Note: +> +> This only applies to development mode. _Lifecycles will not be double-invoked in production mode._ + +For example, consider the following code: +`embed:strict-mode/side-effects-in-constructor.js` + +At first glance, this code might not seem problematic. But if `SharedApplicationState.recordEvent` is not [idempotent](https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning), then instantiating this component multiple times could lead to invalid application state. This sort of subtle bug might not manifest during development, or it might do so inconsistently and so be overlooked. + +By intentionally double-invoking methods like the component constructor, strict mode makes patterns like this easier to spot. \ No newline at end of file diff --git a/content/images/blog/strict-mode-unsafe-lifecycles-warning.png b/content/images/blog/strict-mode-unsafe-lifecycles-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..fbdeccde6bec8f2fbb8d8c8db9c4f87d7d395c82 GIT binary patch literal 53348 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 axo^$0_?r`rnMWwd>w}b%WVyIu!2buI6T3wK literal 0 HcmV?d00001 diff --git a/examples/strict-mode/enabling-strict-mode.js b/examples/strict-mode/enabling-strict-mode.js new file mode 100644 index 000000000..8927e792f --- /dev/null +++ b/examples/strict-mode/enabling-strict-mode.js @@ -0,0 +1,18 @@ +import React from 'react'; + +function ExampleApplication() { + return ( +
+
+ {/* highlight-next-line */} + +
+ + +
+ {/* highlight-next-line */} +
+
+ ); +} \ No newline at end of file diff --git a/examples/strict-mode/side-effects-in-constructor.js b/examples/strict-mode/side-effects-in-constructor.js new file mode 100644 index 000000000..a96a97ad7 --- /dev/null +++ b/examples/strict-mode/side-effects-in-constructor.js @@ -0,0 +1,7 @@ +class TopLevelRoute extends React.Component { + constructor(props) { + super(props); + + SharedApplicationState.recordEvent('ExampleComponent'); + } +} \ No newline at end of file