{"componentChunkName":"component---src-templates-docs-js","path":"/docs/react-api.html","result":{"data":{"markdownRemark":{"html":"<div class=\"scary\">\n<blockquote>\n<p>These docs are old and won’t be updated. Go to <a href=\"https://react.dev/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">react.dev</a> for the new React docs.</p>\n<p>These new documentation pages teach modern React:</p>\n<ul>\n<li><a href=\"https://react.dev/reference/react/components\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react</code>: Components</a></li>\n<li><a href=\"https://react.dev/reference/react/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react</code>: Hooks</a></li>\n<li><a href=\"https://react.dev/reference/react/apis\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react</code>: APIs</a></li>\n<li><a href=\"https://react.dev/reference/react/legacy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">react</code>: Legacy APIs</a></li>\n</ul>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React</code> is the entry point to the React library. If you load React from a <code class=\"gatsby-code-text\">&lt;script></code> tag, these top-level APIs are available on the <code class=\"gatsby-code-text\">React</code> global. If you use ES6 with npm, you can write <code class=\"gatsby-code-text\">import React from 'react'</code>. If you use ES5 with npm, you can write <code class=\"gatsby-code-text\">var React = require('react')</code>.</p>\n<h2 id=\"overview\"><a href=\"#overview\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Overview </h2>\n<h3 id=\"components\"><a href=\"#components\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Components </h3>\n<p>React components let you split the UI into independent, reusable pieces, and think about each piece in isolation. React components can be defined by subclassing <code class=\"gatsby-code-text\">React.Component</code> or <code class=\"gatsby-code-text\">React.PureComponent</code>.</p>\n<ul>\n<li><a href=\"#reactcomponent\"><code class=\"gatsby-code-text\">React.Component</code></a></li>\n<li><a href=\"#reactpurecomponent\"><code class=\"gatsby-code-text\">React.PureComponent</code></a></li>\n</ul>\n<p>If you don’t use ES6 classes, you may use the <code class=\"gatsby-code-text\">create-react-class</code> module instead. See <a href=\"/docs/react-without-es6.html\">Using React without ES6</a> for more information.</p>\n<p>React components can also be defined as functions which can be wrapped:</p>\n<ul>\n<li><a href=\"#reactmemo\"><code class=\"gatsby-code-text\">React.memo</code></a></li>\n</ul>\n<h3 id=\"creating-react-elements\"><a href=\"#creating-react-elements\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Creating React Elements </h3>\n<p>We recommend <a href=\"/docs/introducing-jsx.html\">using JSX</a> to describe what your UI should look like. Each JSX element is just syntactic sugar for calling <a href=\"#createelement\"><code class=\"gatsby-code-text\">React.createElement()</code></a>. You will not typically invoke the following methods directly if you are using JSX.</p>\n<ul>\n<li><a href=\"#createelement\"><code class=\"gatsby-code-text\">createElement()</code></a></li>\n<li><a href=\"#createfactory\"><code class=\"gatsby-code-text\">createFactory()</code></a></li>\n</ul>\n<p>See <a href=\"/docs/react-without-jsx.html\">Using React without JSX</a> for more information.</p>\n<h3 id=\"transforming-elements\"><a href=\"#transforming-elements\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Transforming Elements </h3>\n<p><code class=\"gatsby-code-text\">React</code> provides several APIs for manipulating elements:</p>\n<ul>\n<li><a href=\"#cloneelement\"><code class=\"gatsby-code-text\">cloneElement()</code></a></li>\n<li><a href=\"#isvalidelement\"><code class=\"gatsby-code-text\">isValidElement()</code></a></li>\n<li><a href=\"#reactchildren\"><code class=\"gatsby-code-text\">React.Children</code></a></li>\n</ul>\n<h3 id=\"fragments\"><a href=\"#fragments\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Fragments </h3>\n<p><code class=\"gatsby-code-text\">React</code> also provides a component for rendering multiple elements without a wrapper.</p>\n<ul>\n<li><a href=\"#reactfragment\"><code class=\"gatsby-code-text\">React.Fragment</code></a></li>\n</ul>\n<h3 id=\"refs\"><a href=\"#refs\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Refs </h3>\n<ul>\n<li><a href=\"#reactcreateref\"><code class=\"gatsby-code-text\">React.createRef</code></a></li>\n<li><a href=\"#reactforwardref\"><code class=\"gatsby-code-text\">React.forwardRef</code></a></li>\n</ul>\n<h3 id=\"suspense\"><a href=\"#suspense\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Suspense </h3>\n<p>Suspense lets components “wait” for something before rendering. Today, Suspense only supports one use case: <a href=\"/docs/code-splitting.html#reactlazy\">loading components dynamically with <code class=\"gatsby-code-text\">React.lazy</code></a>. In the future, it will support other use cases like data fetching.</p>\n<ul>\n<li><a href=\"#reactlazy\"><code class=\"gatsby-code-text\">React.lazy</code></a></li>\n<li><a href=\"#reactsuspense\"><code class=\"gatsby-code-text\">React.Suspense</code></a></li>\n</ul>\n<h3 id=\"transitions\"><a href=\"#transitions\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Transitions </h3>\n<p><em>Transitions</em> are a new concurrent feature introduced in React 18. They allow you to mark updates as transitions, which tells React that they can be interrupted and avoid going back to Suspense fallbacks for already visible content.</p>\n<ul>\n<li><a href=\"#starttransition\"><code class=\"gatsby-code-text\">React.startTransition</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">React.useTransition</code></a></li>\n</ul>\n<h3 id=\"hooks\"><a href=\"#hooks\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Hooks </h3>\n<p><em>Hooks</em> are a new addition in React 16.8. They let you use state and other React features without writing a class. Hooks have a <a href=\"/docs/hooks-intro.html\">dedicated docs section</a> and a separate API reference:</p>\n<ul>\n<li>\n<p><a href=\"/docs/hooks-reference.html#basic-hooks\">Basic Hooks</a></p>\n<ul>\n<li><a href=\"/docs/hooks-reference.html#usestate\"><code class=\"gatsby-code-text\">useState</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#useeffect\"><code class=\"gatsby-code-text\">useEffect</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#usecontext\"><code class=\"gatsby-code-text\">useContext</code></a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/docs/hooks-reference.html#additional-hooks\">Additional Hooks</a></p>\n<ul>\n<li><a href=\"/docs/hooks-reference.html#usereducer\"><code class=\"gatsby-code-text\">useReducer</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#usecallback\"><code class=\"gatsby-code-text\">useCallback</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#usememo\"><code class=\"gatsby-code-text\">useMemo</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#useref\"><code class=\"gatsby-code-text\">useRef</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#useimperativehandle\"><code class=\"gatsby-code-text\">useImperativeHandle</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#uselayouteffect\"><code class=\"gatsby-code-text\">useLayoutEffect</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#usedebugvalue\"><code class=\"gatsby-code-text\">useDebugValue</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#usedeferredvalue\"><code class=\"gatsby-code-text\">useDeferredValue</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">useTransition</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#useid\"><code class=\"gatsby-code-text\">useId</code></a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/docs/hooks-reference.html#library-hooks\">Library Hooks</a></p>\n<ul>\n<li><a href=\"/docs/hooks-reference.html#usesyncexternalstore\"><code class=\"gatsby-code-text\">useSyncExternalStore</code></a></li>\n<li><a href=\"/docs/hooks-reference.html#useinsertioneffect\"><code class=\"gatsby-code-text\">useInsertionEffect</code></a></li>\n</ul>\n</li>\n</ul>\n<hr>\n<h2 id=\"reference\"><a href=\"#reference\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Reference </h2>\n<h3 id=\"reactcomponent\"><a href=\"#reactcomponent\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Component</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/Component\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">Component</code></a>.</p>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React.Component</code> is the base class for React components when they are defined using <a href=\"https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ES6 classes</a>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Greeting</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, </span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>See the <a href=\"/docs/react-component.html\">React.Component API Reference</a> for a list of methods and properties related to the base <code class=\"gatsby-code-text\">React.Component</code> class.</p>\n<hr>\n<h3 id=\"reactpurecomponent\"><a href=\"#reactpurecomponent\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.PureComponent</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/PureComponent\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">PureComponent</code></a>.</p>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React.PureComponent</code> is similar to <a href=\"#reactcomponent\"><code class=\"gatsby-code-text\">React.Component</code></a>. The difference between them is that <a href=\"#reactcomponent\"><code class=\"gatsby-code-text\">React.Component</code></a> doesn’t implement <a href=\"/docs/react-component.html#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a>, but <code class=\"gatsby-code-text\">React.PureComponent</code> implements it with a shallow prop and state comparison.</p>\n<p>If your React component’s <code class=\"gatsby-code-text\">render()</code> function renders the same result given the same props and state, you can use <code class=\"gatsby-code-text\">React.PureComponent</code> for a performance boost in some cases.</p>\n<blockquote>\n<p>Note</p>\n<p><code class=\"gatsby-code-text\">React.PureComponent</code>’s <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> only shallowly compares the objects. If these contain complex data structures, it may produce false-negatives for deeper differences. Only extend <code class=\"gatsby-code-text\">PureComponent</code> when you expect to have simple props and state, or use <a href=\"/docs/react-component.html#forceupdate\"><code class=\"gatsby-code-text\">forceUpdate()</code></a> when you know deep data structures have changed. Or, consider using <a href=\"https://immutable-js.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">immutable objects</a> to facilitate fast comparisons of nested data.</p>\n<p>Furthermore, <code class=\"gatsby-code-text\">React.PureComponent</code>’s <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> skips prop updates for the whole component subtree. Make sure all the children components are also “pure”.</p>\n</blockquote>\n<hr>\n<h3 id=\"reactmemo\"><a href=\"#reactmemo\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.memo</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/memo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">memo</code></a>.</p>\n</blockquote>\n</div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">const</span> MyComponent <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">memo</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token function\">MyComponent</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">/* render using props */</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">React.memo</code> is a <a href=\"/docs/higher-order-components.html\">higher order component</a>.</p>\n<p>If your component renders the same result given the same props, you can wrap it in a call to <code class=\"gatsby-code-text\">React.memo</code> for a performance boost in some cases by memoizing the result. This means that React will skip rendering the component, and reuse the last rendered result.</p>\n<p><code class=\"gatsby-code-text\">React.memo</code> only checks for prop changes. If your function component wrapped in <code class=\"gatsby-code-text\">React.memo</code> has a <a href=\"/docs/hooks-state.html\"><code class=\"gatsby-code-text\">useState</code></a>, <a href=\"/docs/hooks-reference.html#usereducer\"><code class=\"gatsby-code-text\">useReducer</code></a> or <a href=\"/docs/hooks-reference.html#usecontext\"><code class=\"gatsby-code-text\">useContext</code></a> Hook in its implementation, it will still rerender when state or context change.</p>\n<p>By default it will only shallowly compare complex objects in the props object. If you want control over the comparison, you can also provide a custom comparison function as the second argument.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">function</span> <span class=\"token function\">MyComponent</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">/* render using props */</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">areEqual</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">prevProps<span class=\"token punctuation\">,</span> nextProps</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">/*\n  return true if passing nextProps to render would return\n  the same result as passing prevProps to render,\n  otherwise return false\n  */</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">memo</span><span class=\"token punctuation\">(</span>MyComponent<span class=\"token punctuation\">,</span> areEqual<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>This method only exists as a <strong><a href=\"/docs/optimizing-performance.html\">performance optimization</a>.</strong> Do not rely on it to “prevent” a render, as this can lead to bugs.</p>\n<blockquote>\n<p>Note</p>\n<p>Unlike the <a href=\"/docs/react-component.html#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> method on class components, the <code class=\"gatsby-code-text\">areEqual</code> function returns <code class=\"gatsby-code-text\">true</code> if the props are equal and <code class=\"gatsby-code-text\">false</code> if the props are not equal. This is the inverse from <code class=\"gatsby-code-text\">shouldComponentUpdate</code>.</p>\n</blockquote>\n<hr>\n<h3 id=\"createelement\"><a href=\"#createelement\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">createElement()</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/createElement\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">createElement</code></a>.</p>\n</blockquote>\n</div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span>\n  type<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">[</span>props<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>children<span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Create and return a new <a href=\"/docs/rendering-elements.html\">React element</a> of the given type. The type argument can be either a tag name string (such as <code class=\"gatsby-code-text\">'div'</code> or <code class=\"gatsby-code-text\">'span'</code>), a <a href=\"/docs/components-and-props.html\">React component</a> type (a class or a function), or a <a href=\"#reactfragment\">React fragment</a> type.</p>\n<p>Code written with <a href=\"/docs/introducing-jsx.html\">JSX</a> will be converted to use <code class=\"gatsby-code-text\">React.createElement()</code>. You will not typically invoke <code class=\"gatsby-code-text\">React.createElement()</code> directly if you are using JSX. See <a href=\"/docs/react-without-jsx.html\">React Without JSX</a> to learn more.</p>\n<hr>\n<h3 id=\"cloneelement\"><a href=\"#cloneelement\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">cloneElement()</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/cloneElement\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">cloneElement</code></a>.</p>\n</blockquote>\n</div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"gatsby-code-text\"><code class=\"gatsby-code-text\">React.cloneElement(\n  element,\n  [config],\n  [...children]\n)</code></pre></div>\n<p>Clone and return a new React element using <code class=\"gatsby-code-text\">element</code> as the starting point. <code class=\"gatsby-code-text\">config</code> should contain all new props, <code class=\"gatsby-code-text\">key</code>, or <code class=\"gatsby-code-text\">ref</code>. The resulting element will have the original element’s props with the new props merged in shallowly. New children will replace existing children. <code class=\"gatsby-code-text\">key</code> and <code class=\"gatsby-code-text\">ref</code> from the original element will be preserved if no <code class=\"gatsby-code-text\">key</code> and <code class=\"gatsby-code-text\">ref</code> present in the <code class=\"gatsby-code-text\">config</code>.</p>\n<p><code class=\"gatsby-code-text\">React.cloneElement()</code> is almost equivalent to:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>element.type</span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>element<span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">}</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>props<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>children<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>element.type</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>However, it also preserves <code class=\"gatsby-code-text\">ref</code>s. This means that if you get a child with a <code class=\"gatsby-code-text\">ref</code> on it, you won’t accidentally steal it from your ancestor. You will get the same <code class=\"gatsby-code-text\">ref</code> attached to your new element. The new <code class=\"gatsby-code-text\">ref</code> or <code class=\"gatsby-code-text\">key</code> will replace old ones if present.</p>\n<p>This API was introduced as a replacement of the deprecated <code class=\"gatsby-code-text\">React.addons.cloneWithProps()</code>.</p>\n<hr>\n<h3 id=\"createfactory\"><a href=\"#createfactory\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">createFactory()</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/createFactory\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">createFactory</code></a>.</p>\n</blockquote>\n</div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span><span class=\"token function\">createFactory</span><span class=\"token punctuation\">(</span>type<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Return a function that produces React elements of a given type. Like <a href=\"#createelement\"><code class=\"gatsby-code-text\">React.createElement()</code></a>, the type argument can be either a tag name string (such as <code class=\"gatsby-code-text\">'div'</code> or <code class=\"gatsby-code-text\">'span'</code>), a <a href=\"/docs/components-and-props.html\">React component</a> type (a class or a function), or a <a href=\"#reactfragment\">React fragment</a> type.</p>\n<p>This helper is considered legacy, and we encourage you to either use JSX or use <code class=\"gatsby-code-text\">React.createElement()</code> directly instead.</p>\n<p>You will not typically invoke <code class=\"gatsby-code-text\">React.createFactory()</code> directly if you are using JSX. See <a href=\"/docs/react-without-jsx.html\">React Without JSX</a> to learn more.</p>\n<hr>\n<h3 id=\"isvalidelement\"><a href=\"#isvalidelement\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">isValidElement()</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/isValidElement\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">isValidElement</code></a>.</p>\n</blockquote>\n</div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span><span class=\"token function\">isValidElement</span><span class=\"token punctuation\">(</span>object<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Verifies the object is a React element. Returns <code class=\"gatsby-code-text\">true</code> or <code class=\"gatsby-code-text\">false</code>.</p>\n<hr>\n<h3 id=\"reactchildren\"><a href=\"#reactchildren\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Children</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/Children\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">Children</code></a>.</p>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React.Children</code> provides utilities for dealing with the <code class=\"gatsby-code-text\">this.props.children</code> opaque data structure.</p>\n<h4 id=\"reactchildrenmap\"><a href=\"#reactchildrenmap\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Children.map</code> </h4>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span>Children<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>children<span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>thisArg<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Invokes a function on every immediate child contained within <code class=\"gatsby-code-text\">children</code> with <code class=\"gatsby-code-text\">this</code> set to <code class=\"gatsby-code-text\">thisArg</code>. If <code class=\"gatsby-code-text\">children</code> is an array it will be traversed and the function will be called for each child in the array. If children is <code class=\"gatsby-code-text\">null</code> or <code class=\"gatsby-code-text\">undefined</code>, this method will return <code class=\"gatsby-code-text\">null</code> or <code class=\"gatsby-code-text\">undefined</code> rather than an array.</p>\n<blockquote>\n<p>Note</p>\n<p>If <code class=\"gatsby-code-text\">children</code> is a <code class=\"gatsby-code-text\">Fragment</code> it will be treated as a single child and not traversed.</p>\n</blockquote>\n<h4 id=\"reactchildrenforeach\"><a href=\"#reactchildrenforeach\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Children.forEach</code> </h4>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span>Children<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>children<span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span>thisArg<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Like <a href=\"#reactchildrenmap\"><code class=\"gatsby-code-text\">React.Children.map()</code></a> but does not return an array.</p>\n<h4 id=\"reactchildrencount\"><a href=\"#reactchildrencount\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Children.count</code> </h4>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span>Children<span class=\"token punctuation\">.</span><span class=\"token function\">count</span><span class=\"token punctuation\">(</span>children<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Returns the total number of components in <code class=\"gatsby-code-text\">children</code>, equal to the number of times that a callback passed to <code class=\"gatsby-code-text\">map</code> or <code class=\"gatsby-code-text\">forEach</code> would be invoked.</p>\n<h4 id=\"reactchildrenonly\"><a href=\"#reactchildrenonly\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Children.only</code> </h4>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span>Children<span class=\"token punctuation\">.</span><span class=\"token function\">only</span><span class=\"token punctuation\">(</span>children<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Verifies that <code class=\"gatsby-code-text\">children</code> has only one child (a React element) and returns it. Otherwise this method throws an error.</p>\n<blockquote>\n<p>Note:</p>\n<p><code class=\"gatsby-code-text\">React.Children.only()</code> does not accept the return value of <a href=\"#reactchildrenmap\"><code class=\"gatsby-code-text\">React.Children.map()</code></a> because it is an array rather than a React element.</p>\n</blockquote>\n<h4 id=\"reactchildrentoarray\"><a href=\"#reactchildrentoarray\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Children.toArray</code> </h4>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span>Children<span class=\"token punctuation\">.</span><span class=\"token function\">toArray</span><span class=\"token punctuation\">(</span>children<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Returns the <code class=\"gatsby-code-text\">children</code> opaque data structure as a flat array with keys assigned to each child. Useful if you want to manipulate collections of children in your render methods, especially if you want to reorder or slice <code class=\"gatsby-code-text\">this.props.children</code> before passing it down.</p>\n<blockquote>\n<p>Note:</p>\n<p><code class=\"gatsby-code-text\">React.Children.toArray()</code> changes keys to preserve the semantics of nested arrays when flattening lists of children. That is, <code class=\"gatsby-code-text\">toArray</code> prefixes each key in the returned array so that each element’s key is scoped to the input array containing it.</p>\n</blockquote>\n<hr>\n<h3 id=\"reactfragment\"><a href=\"#reactfragment\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Fragment</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/Fragment\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">Fragment</code></a>.</p>\n</blockquote>\n</div>\n<p>The <code class=\"gatsby-code-text\">React.Fragment</code> component lets you return multiple elements in a <code class=\"gatsby-code-text\">render()</code> method without creating an additional DOM element:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Fragment</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      Some text.\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h2</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">A heading</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h2</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Fragment</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>You can also use it with the shorthand <code class=\"gatsby-code-text\">&lt;>&lt;/></code> syntax. For more information, see <a href=\"/blog/2017/11/28/react-v16.2.0-fragment-support.html\">React v16.2.0: Improved Support for Fragments</a>.</p>\n<h3 id=\"reactcreateref\"><a href=\"#reactcreateref\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.createRef</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/createRef\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">createRef</code></a>.</p>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React.createRef</code> creates a <a href=\"/docs/refs-and-the-dom.html\">ref</a> that can be attached to React elements via the ref attribute.\n<div class=\"gatsby-highlight\">\n        <pre class=\"gatsby-code-jsx\"><code><span class=\"token keyword\">class</span> <span class=\"token class-name\">MyComponent</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>inputRef <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">createRef</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">ref</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>inputRef<span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">componentDidMount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>inputRef<span class=\"token punctuation\">.</span>current<span class=\"token punctuation\">.</span><span class=\"token function\">focus</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n        </div></p>\n<h3 id=\"reactforwardref\"><a href=\"#reactforwardref\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.forwardRef</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/forwardRef\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">forwardRef</code></a>.</p>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React.forwardRef</code> creates a React component that forwards the <a href=\"/docs/refs-and-the-dom.html\">ref</a> attribute it receives to another component below in the tree. This technique is not very common but is particularly useful in two scenarios:</p>\n<ul>\n<li><a href=\"/docs/forwarding-refs.html#forwarding-refs-to-dom-components\">Forwarding refs to DOM components</a></li>\n<li><a href=\"/docs/forwarding-refs.html#forwarding-refs-in-higher-order-components\">Forwarding refs in higher-order-components</a></li>\n</ul>\n<p><code class=\"gatsby-code-text\">React.forwardRef</code> accepts a rendering function as an argument. React will call this function with <code class=\"gatsby-code-text\">props</code> and <code class=\"gatsby-code-text\">ref</code> as two arguments. This function should return a React node.</p>\n<p><div class=\"gatsby-highlight\">\n        <pre class=\"gatsby-code-jsx\"><code><span class=\"gatsby-highlight-code-line\"><span class=\"token keyword\">const</span> FancyButton <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">forwardRef</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props<span class=\"token punctuation\">,</span> ref</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">ref</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>ref<span class=\"token punctuation\">}</span></span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>FancyButton<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">    </span><span class=\"token punctuation\">{</span>props<span class=\"token punctuation\">.</span>children<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// You can now get a ref directly to the DOM button:</span>\n<span class=\"token keyword\">const</span> ref <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">createRef</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">FancyButton</span></span> <span class=\"token attr-name\">ref</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>ref<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Click me!</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">FancyButton</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span></code></pre>\n        </div></p>\n<p>In the above example, React passes a <code class=\"gatsby-code-text\">ref</code> given to <code class=\"gatsby-code-text\">&lt;FancyButton ref={ref}></code> element as a second argument to the rendering function inside the <code class=\"gatsby-code-text\">React.forwardRef</code> call. This rendering function passes the <code class=\"gatsby-code-text\">ref</code> to the <code class=\"gatsby-code-text\">&lt;button ref={ref}></code> element.</p>\n<p>As a result, after React attaches the ref, <code class=\"gatsby-code-text\">ref.current</code> will point directly to the <code class=\"gatsby-code-text\">&lt;button></code> DOM element instance.</p>\n<p>For more information, see <a href=\"/docs/forwarding-refs.html\">forwarding refs</a>.</p>\n<h3 id=\"reactlazy\"><a href=\"#reactlazy\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.lazy</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/lazy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">lazy</code></a>.</p>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React.lazy()</code> lets you define a component that is loaded dynamically. This helps reduce the bundle size to delay loading components that aren’t used during the initial render.</p>\n<p>You can learn how to use it from our <a href=\"/docs/code-splitting.html#reactlazy\">code splitting documentation</a>. You might also want to check out <a href=\"https://medium.com/@pomber/lazy-loading-and-preloading-components-in-react-16-6-804de091c82d\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">this article</a> explaining how to use it in more detail.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// This component is loaded dynamically</span>\n<span class=\"token keyword\">const</span> SomeComponent <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">lazy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">import</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./SomeComponent'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Note that rendering <code class=\"gatsby-code-text\">lazy</code> components requires that there’s a <code class=\"gatsby-code-text\">&lt;React.Suspense></code> component higher in the rendering tree. This is how you specify a loading indicator.</p>\n<h3 id=\"reactsuspense\"><a href=\"#reactsuspense\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Suspense</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/Suspense\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">Suspense</code></a>.</p>\n</blockquote>\n</div>\n<p><code class=\"gatsby-code-text\">React.Suspense</code> lets you specify the loading indicator in case some components in the tree below it are not yet ready to render. In the future we plan to let <code class=\"gatsby-code-text\">Suspense</code> handle more scenarios such as data fetching. You can read about this in <a href=\"/blog/2018/11/27/react-16-roadmap.html\">our roadmap</a>.</p>\n<p>Today, lazy loading components is the <strong>only</strong> use case supported by <code class=\"gatsby-code-text\">&lt;React.Suspense></code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// This component is loaded dynamically</span>\n<span class=\"token keyword\">const</span> OtherComponent <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">lazy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">import</span><span class=\"token punctuation\">(</span><span class=\"token string\">'./OtherComponent'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">MyComponent</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token comment\">// Displays &lt;Spinner> until OtherComponent loads</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Suspense</span></span> <span class=\"token attr-name\">fallback</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Spinner</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">OtherComponent</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Suspense</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>It is documented in our <a href=\"/docs/code-splitting.html#reactlazy\">code splitting guide</a>. Note that <code class=\"gatsby-code-text\">lazy</code> components can be deep inside the <code class=\"gatsby-code-text\">Suspense</code> tree — it doesn’t have to wrap every one of them. The best practice is to place <code class=\"gatsby-code-text\">&lt;Suspense></code> where you want to see a loading indicator, but to use <code class=\"gatsby-code-text\">lazy()</code> wherever you want to do code splitting.</p>\n<blockquote>\n<p>Note</p>\n<p>For content that is already shown to the user, switching back to a loading indicator can be disorienting. It is sometimes better to show the “old” UI while the new UI is being prepared. To do this, you can use the new transition APIs <a href=\"#starttransition\"><code class=\"gatsby-code-text\">startTransition</code></a> and <a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">useTransition</code></a> to mark updates as transitions and avoid unexpected fallbacks.</p>\n</blockquote>\n<h4 id=\"reactsuspense-in-server-side-rendering\"><a href=\"#reactsuspense-in-server-side-rendering\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Suspense</code> in Server Side Rendering </h4>\n<p>During server side rendering Suspense Boundaries allow you to flush your application in smaller chunks by suspending.\nWhen a component suspends we schedule a low priority task to render the closest Suspense boundary’s fallback. If the component unsuspends before we flush the fallback then we send down the actual content and throw away the fallback.</p>\n<h4 id=\"reactsuspense-during-hydration\"><a href=\"#reactsuspense-during-hydration\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.Suspense</code> during hydration </h4>\n<p>Suspense boundaries depend on their parent boundaries being hydrated before they can hydrate, but they can hydrate independently from sibling boundaries. Events on a boundary before it is hydrated will cause the boundary to hydrate at a higher priority than neighboring boundaries. <a href=\"https://github.com/reactwg/react-18/discussions/130\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Read more</a></p>\n<h3 id=\"starttransition\"><a href=\"#starttransition\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">React.startTransition</code> </h3>\n<div class=\"scary\">\n<blockquote>\n<p>This content is out of date.</p>\n<p>Read the new React documentation for <a href=\"https://react.dev/reference/react/startTransition\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">startTransition</code></a>.</p>\n</blockquote>\n</div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">React<span class=\"token punctuation\">.</span><span class=\"token function\">startTransition</span><span class=\"token punctuation\">(</span>callback<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">React.startTransition</code> lets you mark updates inside the provided callback as transitions. This method is designed to be used when <a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">React.useTransition</code></a> is not available.</p>\n<blockquote>\n<p>Note:</p>\n<p>Updates in a transition yield to more urgent updates such as clicks.</p>\n<p>Updates in a transition will not show a fallback for re-suspended content, allowing the user to continue interacting while rendering the update.</p>\n<p><code class=\"gatsby-code-text\">React.startTransition</code> does not provide an <code class=\"gatsby-code-text\">isPending</code> flag. To track the pending status of a transition see <a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">React.useTransition</code></a>.</p>\n</blockquote>","frontmatter":{"title":"React Top-Level API","next":null,"prev":null},"fields":{"path":"content/docs/reference-react.md","slug":"docs/react-api.html"}}},"pageContext":{"slug":"docs/react-api.html"}},"staticQueryHashes":[]}