{"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>는 React 라이브러리의 진입점입니다. <code class=\"gatsby-code-text\">&lt;script></code> 태그를 사용하여 React를 불러오게 되면 전역 객체 <code class=\"gatsby-code-text\">React</code>를 통하여 최상위 API를 사용할 수 있습니다. npm에서 ES6를 사용하는 경우, <code class=\"gatsby-code-text\">import React from 'react'</code>를 작성하면 됩니다. npm에서 ES5를 사용하는 경우, <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>개요 </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>컴포넌트 </h3>\n<p>React 컴포넌트를 사용하면 UI를 독립적이고 재사용할 수 있는 부분으로 나누고 각 부분을 분리하여 생각할 수 있습니다. React 컴포넌트는 <code class=\"gatsby-code-text\">React.Component</code> 또는 <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>ES6 class를 사용하지 않는다면, <code class=\"gatsby-code-text\">create-react-class</code> 모듈을 대신 사용해도 됩니다. 자세한 정보는 <a href=\"/docs/react-without-es6.html\">ES6 없이 React를 사용하기</a> 문서에서 확인할 수 있습니다.</p>\n<p>React 컴포넌트를 정의할 때 래핑될 수 있는 함수의 형태로 할 수도 있습니다.</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>React 엘리먼트 생성하기 </h3>\n<p>UI의 형태를 설명하는 데에 <a href=\"/docs/introducing-jsx.html\">JSX를 사용할 것</a>을 권장합니다. 각 JSX 엘리먼트는 단지 <a href=\"#createelement\"><code class=\"gatsby-code-text\">React.createElement()</code></a>를 호출하는 편리한 문법에 불과합니다. 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>자세한 정보는 <a href=\"/docs/react-without-jsx.html\">JSX 없이 React 사용하기</a> 문서에서 확인할 수 있습니다.</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>엘리먼트 변환하기 </h3>\n<p><code class=\"gatsby-code-text\">React</code>는 엘리먼트를 조작하는 API들을 제공합니다.</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>는 래퍼 없이 여러 엘리먼트를 렌더링할 수 있는 컴포넌트를 제공합니다.</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를 사용하면 컴포넌트가 렌더링하기 전에 다른 작업이 먼저 이루어지도록 “대기합니다”. 현재 Suspense는 단 하나의 사용 사례 <a href=\"/docs/code-splitting.html#reactlazy\"><code class=\"gatsby-code-text\">React.lazy</code>를 사용하여 컴포넌트를 동적으로 불러오기</a>만 지원합니다. 나중에는 데이터 불러오기와 같은 사용 사례를 지원할 계획입니다.</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>는 React 18에 도입된 새로운 동시(concurrent) 기능입니다. 이는 업데이트를 transitions으로 표시할 수 있게 하여 React에게 중단될 수 있음을 알리고, 이미 보이는 콘텐츠에 대해 Suspense Fallback으로 가는 것을 방지할 수 있습니다.</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>는 React 16.8에 새로 추가되었습니다. Hooks를 사용하면 class를 사용하지 않아도 state와 React 기능들을 사용할 수 있도록 해줍니다. Hooks만을 다루는 <a href=\"/docs/hooks-intro.html\">문서</a>와 API 문서가 존재합니다.</p>\n<ul>\n<li>\n<p><a href=\"/docs/hooks-reference.html#basic-hooks\">기본적인 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\">추가적인 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>는 <a href=\"https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ES6 class</a>를 사용하여 React 컴포넌트를 정의할 때에 기초가 되는 class입니다.</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><code class=\"gatsby-code-text\">React.Component</code> 기초 class와 관련된 메서드와 속성 목록은 <a href=\"/docs/react-component.html\">React.Component API Reference</a>에서 확인할 수 있습니다.</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>는 <a href=\"#reactcomponent\"><code class=\"gatsby-code-text\">React.Component</code></a>와 비슷합니다. <a href=\"#reactcomponent\"><code class=\"gatsby-code-text\">React.Component</code></a>는 <a href=\"/docs/react-component.html#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a>를 구현하지 않지만, <code class=\"gatsby-code-text\">React.PureComponent</code>는 props와 state를 이용한 얕은 비교를 구현한다는 차이점만이 존재합니다.</p>\n<p>React 컴포넌트의 <code class=\"gatsby-code-text\">render()</code> 함수가 동일한 props와 state에 대하여 동일한 결과를 렌더링한다면, <code class=\"gatsby-code-text\">React.PureComponent</code>를 사용하여 경우에 따라 성능 향상을 누릴 수 있습니다.</p>\n<blockquote>\n<p>주의</p>\n<p><code class=\"gatsby-code-text\">React.PureComponent</code>의 <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>는 컴포넌트에 대하여 얕은 비교만을 수행합니다. 따라서 컴포넌트에 복잡한 자료 구조가 포함되어있다면, 깊은 차이가 존재함에도 불구하고 차이가 없다고 판단하는 잘못된 결과를 만들어낼 수 있습니다. props와 state의 구조가 간단할 것으로 예상될 때에만 <code class=\"gatsby-code-text\">PureComponent</code>를 상속하고, 깊은 자료 구조의 변화가 있다면 <a href=\"/docs/react-component.html#forceupdate\"><code class=\"gatsby-code-text\">forceUpdate()</code></a>를 사용하세요. 또는 중첩된 데이터들을 빠르게 비교할 수 있도록 하려면 <a href=\"https://facebook.github.io/immutable-js/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">불변 객체</a>의 사용을 검토해보세요.</p>\n<p>더 나아가 <code class=\"gatsby-code-text\">React.PureComponent</code>의 <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>는 컴포넌트의 하위 트리에 대한 props 갱신 작업을 수행하지 않습니다. 자식 컴포넌트들이 “순수”한지 꼭 확인하기 바랍니다.</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\">/* 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>는 <a href=\"/docs/higher-order-components.html\">고차 컴포넌트(Higher Order Component)</a>입니다.</p>\n<p>컴포넌트가 동일한 props로 동일한 결과를 렌더링해낸다면, <code class=\"gatsby-code-text\">React.memo</code>를 호출하고 결과를 메모이징(Memoizing)하도록 래핑하여 경우에 따라 성능 향상을 누릴 수 있습니다. 즉, React는 컴포넌트를 렌더링하지 않고 마지막으로 렌더링된 결과를 재사용합니다.</p>\n<p><code class=\"gatsby-code-text\">React.memo</code>는 props 변화에만 영향을 줍니다. <code class=\"gatsby-code-text\">React.memo</code>로 감싸진 함수 컴포넌트 구현에 <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> 또는 <a href=\"/docs/hooks-reference.html#usecontext\"><code class=\"gatsby-code-text\">useContext</code></a> 훅을 사용한다면, 여전히 state나 context가 변할 때 다시 렌더링됩니다.</p>\n<p>props가 갖는 복잡한 객체에 대하여 얕은 비교만을 수행하는 것이 기본 동작입니다. 다른 비교 동작을 원한다면, 두 번째 인자로 별도의 비교 함수를 제공하면 됩니다.</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\">/* 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  nextProps가 prevProps와 동일한 값을 가지면 true를 반환하고, 그렇지 않다면 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>이 메서드는 오직 <strong><a href=\"/docs/optimizing-performance.html\">성능 최적화</a></strong>를 위하여 사용됩니다. 렌더링을 “방지”하기 위하여 사용하지 마세요. 버그를 만들 수 있습니다.</p>\n<blockquote>\n<p>주의</p>\n<p>class 컴포넌트의 <a href=\"/docs/react-component.html#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> 메서드와 달리, <code class=\"gatsby-code-text\">areEqual</code> 함수는 props들이 서로 같으면 <code class=\"gatsby-code-text\">true</code>를 반환하고, props들이 서로 다르면 <code class=\"gatsby-code-text\">false</code>를 반환합니다. 이것은 <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>인자로 주어지는 타입에 따라 새로운 <a href=\"/docs/rendering-elements.html\">React 엘리먼트</a>를 생성하여 반환합니다. type 인자로는 태그 이름 문자열(<code class=\"gatsby-code-text\">'div'</code> 또는 <code class=\"gatsby-code-text\">'span'</code> 등), <a href=\"/docs/components-and-props.html\">React 컴포넌트</a> 타입, 또는 <a href=\"#reactfragment\">React Fragment</a> 타입 중 하나가 올 수 있습니다.</p>\n<p>JSX로 작성된 코드는 <code class=\"gatsby-code-text\">React.createElement()</code>를 사용하는 형태로 변환됩니다. JSX를 사용할 경우 <code class=\"gatsby-code-text\">React.createElement()</code>를 직접 호출하는 일은 거의 없습니다. 자세한 정보는 <a href=\"/docs/react-without-jsx.html\">JSX 없이 React 사용하기</a> 문서에서 확인할 수 있습니다.</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><code class=\"gatsby-code-text\">element</code>를 기준으로 새로운 React 엘리먼트를 복사하고 반환합니다. <code class=\"gatsby-code-text\">config</code>는 <code class=\"gatsby-code-text\">key</code>와 <code class=\"gatsby-code-text\">ref</code> 그리고 모든 새로운 props를 포함합니다. 새로운 엘리먼트에는 원본 엘리먼트가 가졌던 props가 새로운 props와 얕게 합쳐진 뒤 주어집니다. 새로운 자식들은 기존의 자식들을 대체합니다. <code class=\"gatsby-code-text\">config</code>에 <code class=\"gatsby-code-text\">key</code>와 <code class=\"gatsby-code-text\">ref</code>가 없다면 원본 엘리먼트의 <code class=\"gatsby-code-text\">key</code>와 <code class=\"gatsby-code-text\">ref</code>는 그대로 유지됩니다.</p>\n<p><code class=\"gatsby-code-text\">React.cloneElement()</code>는 아래의 구문과 거의 동등합니다.</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>그렇지만 <code class=\"gatsby-code-text\">ref</code>들이 유지된다는 점이 다릅니다. 즉 조상이 가지고 있을 <code class=\"gatsby-code-text\">ref</code>를 사용하여 자식 엘리먼트에 접근하는 것이 허용됩니다. 새로운 엘리먼트에 덧붙여지는 것과 동일한 <code class=\"gatsby-code-text\">ref</code>를 얻을 수 있습니다. 새로운 <code class=\"gatsby-code-text\">ref</code> 또는 <code class=\"gatsby-code-text\">key</code>가 있다면 이전 값을 대체합니다.</p>\n<p>이 API는 더 이상 사용되지 않는 <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>주어진 타입의 React 엘리먼트를 만들어내는 함수를 반환합니다. <a href=\"#createelement\"><code class=\"gatsby-code-text\">React.createElement()</code></a>와 마찬가지로 type 인자는 태그 이름 문자열(<code class=\"gatsby-code-text\">'div'</code> 또는 <code class=\"gatsby-code-text\">'span'</code> 등), <a href=\"/docs/components-and-props.html\">React 컴포넌트</a> 타입, 또는 <a href=\"#reactfragment\">React Fragment</a> 타입 중 하나가 올 수 있습니다.</p>\n<p>이 헬퍼 함수는 레거시 기능으로 간주되며, 대신 JSX 문법을 사용하거나 <code class=\"gatsby-code-text\">React.createElement()</code>를 직접 사용하는 것이 좋습니다.</p>\n<p>JSX를 사용할 경우 <code class=\"gatsby-code-text\">React.createFactory()</code>를 직접 호출하는 일은 거의 없습니다. 자세한 정보는 <a href=\"/docs/react-without-jsx.html\">JSX 없이 React 사용하기</a> 문서에서 확인할 수 있습니다.</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>객체가 React 엘리먼트인지 확인합니다. <code class=\"gatsby-code-text\">true</code> 또는 <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>는 불투명(Opaque) 자료 구조인 <code class=\"gatsby-code-text\">this.props.children</code>를 다루는 유틸리티 함수들을 제공합니다.</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><code class=\"gatsby-code-text\">children</code>에 포함된 각 자식에 대하여 <code class=\"gatsby-code-text\">this</code>를 <code class=\"gatsby-code-text\">thisArg</code>의 값으로 설정한 함수를 호출합니다. <code class=\"gatsby-code-text\">children</code>이 배열일 경우, 이 배열의 각 자식에 대하여 함수가 호출됩니다. <code class=\"gatsby-code-text\">children</code>이 <code class=\"gatsby-code-text\">null</code> 또는 <code class=\"gatsby-code-text\">undefined</code>일 경우, 이 메서드는 배열이 아니라 <code class=\"gatsby-code-text\">null</code> 또는 <code class=\"gatsby-code-text\">undefined</code>를 반환합니다.</p>\n<blockquote>\n<p>주의</p>\n<p><code class=\"gatsby-code-text\">children</code>이 <code class=\"gatsby-code-text\">Fragment</code>일 경우, <code class=\"gatsby-code-text\">children</code>은 단일 자식으로 취급되어 순회하지 않습니다.</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><a href=\"#reactchildrenmap\"><code class=\"gatsby-code-text\">React.Children.map()</code></a>와 비슷하지만, 배열을 반환하지 않습니다.</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><code class=\"gatsby-code-text\">children</code>에 포함된 컴포넌트의 개수를 반환합니다. <code class=\"gatsby-code-text\">map</code> 또는 <code class=\"gatsby-code-text\">forEach</code>로 전달된 콜백이 호출된 횟수와 동일한 값입니다.</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><code class=\"gatsby-code-text\">children</code>이 단 하나의 자식(React 엘리먼트)를 갖는지 확인하고 해당 자식 엘리먼트를 반환합니다. 그렇지 않을 경우 오류를 발생시킵니다.</p>\n<blockquote>\n<p>주의</p>\n<p><code class=\"gatsby-code-text\">React.Children.only()</code>는 <a href=\"#reactchildrenmap\"><code class=\"gatsby-code-text\">React.Children.map()</code></a>의 반환값을 허용하지 않는데, 왜냐하면 반환값이 React 엘리먼트가 아니라 배열이기 때문입니다.</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>각 자식에 <code class=\"gatsby-code-text\">key</code>가 할당된 배열을 <code class=\"gatsby-code-text\">children</code> 불투명(opaque) 자료 구조로 반환합니다. <code class=\"gatsby-code-text\">render()</code> 메서드에서 <code class=\"gatsby-code-text\">children</code>의 집합을 다루고 싶을 때, 특히 <code class=\"gatsby-code-text\">this.props.children</code>을 하부로 전달하기 전에 다시 정렬하거나 일부만 잘라내고 싶을 때에 유용합니다.</p>\n<blockquote>\n<p>주의</p>\n<p><code class=\"gatsby-code-text\">React.Children.toArray()</code>는 <code class=\"gatsby-code-text\">children</code>을 평평하게(Flatten) 만들 때, 중첩된 배열들의 의미를 보존하기 위하여 <code class=\"gatsby-code-text\">key</code>를 변경합니다. 즉, <code class=\"gatsby-code-text\">toArray</code>는 반환되는 배열에 <code class=\"gatsby-code-text\">key</code> 값을 덧붙여서 각 엘리먼트가 갖는 <code class=\"gatsby-code-text\">key</code>가 평평해진 배열 내에서만 유효한 범위를 형성하도록 해줍니다.</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><code class=\"gatsby-code-text\">React.Fragment</code> 컴포넌트를 사용하면 <code class=\"gatsby-code-text\">render()</code> 메서드 안에서 추가적인 DOM 엘리먼트를 생성하지 않아도 여러 엘리먼트를 반환할 수 있습니다.</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>축약형인 <code class=\"gatsby-code-text\">&lt;>&lt;/></code> 문법으로도 동일하게 사용할 수 있습니다. 자세한 정보는 <a href=\"/blog/2017/11/28/react-v16.2.0-fragment-support.html\">React v16.2.0: Fragment에 대한 향상된 지원</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>는 React 엘리먼트에 <code class=\"gatsby-code-text\">ref</code> 어트리뷰트로 붙일 수 있는 <a href=\"/docs/refs-and-the-dom.html\">ref</a>를 생성합니다.\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>는 전달받은 <a href=\"/docs/refs-and-the-dom.html\"><code class=\"gatsby-code-text\">ref</code></a> 어트리뷰트를 하부 트리 내의 다른 컴포넌트로 전달하는 React 컴포넌트를 생성합니다. 이 기법은 잘 사용되지 않지만, 아래의 두 시나리오에서는 특히 유용합니다.</p>\n<ul>\n<li><a href=\"/docs/forwarding-refs.html#forwarding-refs-to-dom-components\">DOM 엘리먼트로 ref 전달하기</a></li>\n<li><a href=\"/docs/forwarding-refs.html#forwarding-refs-in-higher-order-components\">고차 컴포넌트(Higher Order Component)로 ref 전달하기</a></li>\n</ul>\n<p><code class=\"gatsby-code-text\">React.forwardRef</code>는 렌더링에 사용될 함수를 인자로 받을 수 있습니다. React는 이 함수를 두 개 인자 <code class=\"gatsby-code-text\">props</code>와 <code class=\"gatsby-code-text\">ref</code>를 사용하여 호출하고, 이 함수는 React 노드를 반환합니다.</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>위의 예시에서 React는 <code class=\"gatsby-code-text\">&lt;FancyButton ref={ref}></code> 엘리먼트에 주어진 <code class=\"gatsby-code-text\">ref</code>를 <code class=\"gatsby-code-text\">React.forwardRef</code> 호출시 렌더링 함수에 2번째 인자로 전달합니다. 이 렌더링 함수는 <code class=\"gatsby-code-text\">ref</code>를 <code class=\"gatsby-code-text\">&lt;button ref={ref}></code> 엘리먼트에 전달합니다.</p>\n<p>따라서 React가 해당 ref를 붙이고 난 뒤, <code class=\"gatsby-code-text\">ref.current</code>는 <code class=\"gatsby-code-text\">&lt;button></code> DOM 엘리먼트 인스턴스를 직접 가리키게 됩니다.</p>\n<p>자세한 정보는 <a href=\"/docs/forwarding-refs.html\">ref 전달하기</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>를 사용하면 동적으로 불러오는 컴포넌트를 정의할 수 있습니다. 그러면 번들의 크기를 줄이고, 초기 렌더링에서 사용되지 않는 컴포넌트를 불러오는 작업을 지연시킬 수 있습니다.</p>\n<p>사용 방법은 <a href=\"/docs/code-splitting.html#reactlazy\">Code Splitting</a> 문서에서 익힐 수 있습니다. 또한 사용 방법을 자세히 다룬 <a href=\"https://medium.com/@pomber/lazy-loading-and-preloading-components-in-react-16-6-804de091c82d\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">이 글</a>을 읽어보는 것도 좋습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// 이 컴포넌트는 동적으로 불러옵니다</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><code class=\"gatsby-code-text\">lazy</code>한 컴포넌트를 렌더링하려면 렌더링 트리 상위에 <code class=\"gatsby-code-text\">&lt;React.Suspense></code> 컴포넌트가 존재해야 한다는 점에 유의하세요. 이를 활용하여 로딩 지시기(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><code class=\"gatsby-code-text\">React.Suspense</code>는 트리 하단에 있는 일부 컴포넌트가 아직 렌더링할 준비가 되지 않은 경우 로딩 지시기 (Loading indicator)를 나타낼 수 있도록 해줍니다. 향후에는 <code class=\"gatsby-code-text\">Suspense</code>가 데이터 가져오기(fetching)등의 더 많은 시나리오를 처리할 수 있도록 할 계획입니다. 이에 대한 내용은 <a href=\"/blog/2018/11/27/react-16-roadmap.html\">로드맵</a>에서 확인할 수 있습니다.</p>\n<p>현재 <code class=\"gatsby-code-text\">&lt;React.Suspense></code>가 지원하는 <strong>유일한</strong> 사용 사례는 lazy loading 컴포넌트입니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token comment\">// 이 컴포넌트는 동적으로 불러옵니다</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>관련된 내용을 <a href=\"/docs/code-splitting.html#reactlazy\">Code Splitting 가이드</a> 문서에서 설명하고 있습니다. <code class=\"gatsby-code-text\">lazy</code>한 컴포넌트는 <code class=\"gatsby-code-text\">Suspense</code> 트리 내의 깊숙한 곳에 위치할 수 있다는 점에 유의하세요. 즉, <code class=\"gatsby-code-text\">Suspense</code>가 모든 컴포넌트를 감쌀 필요는 없다는 것입니다. 가장 좋은 사용법은 로딩 지시기를 보여주고 싶은 지점에 <code class=\"gatsby-code-text\">&lt;Suspense></code>를 작성하는 것이지만, Code Splitting을 하고자 하는 지점 어디서든지 <code class=\"gatsby-code-text\">lazy()</code>를 써야 할 것입니다.</p>\n<blockquote>\n<p>주의</p>\n<p>사용자에게 이미 표시된 콘텐츠의 경우, 다시 로딩 지시기(Loading Indicator)로 전환되는 것은 혼란을 야기할 수 있습니다. 때로는 새로운 UI가 준비되는 동안 “기존의” UI를 보여주는 것이 더 나을 수 있습니다. 이를 위해, 새로운 transition API인  <a href=\"#starttransition\"><code class=\"gatsby-code-text\">startTransition</code></a>과 <a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">useTransition</code></a>를 사용하여 수정된 내용을 transition으로 표시하고 예상치 못한 fallback을 방지할 수 있습니다.</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> </h4>\n<p>서버 사이드 렌더링 중에 Suspense 경계(Suspense Boundaries)를 사용하면 어플리케이션을 일시 중단하여 더 작은 덩어리로 렌더링할 수 있습니다.\n컴포넌트 렌더링이 일시 중단되면 가장 가까운 Suspense boundary의 fallback을 렌더링하기 위해 우선 순위가 낮은 작업을 예약합니다. Fallback을 렌더링 하기 전에 컴포넌트 렌더링이 재개된다면(unsuspends) 실제 콘텐츠를 보여주고 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> 는 제공된 콜백의 내부를 transition으로 표시할 수 있게합니다. 해당 메서드는 <a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">React.useTransition</code></a> 를 사용할 수 없는 경우에 사용하도록 설계되었습니다.</p>\n<blockquote>\n<p>주의</p>\n<p>Transition 업데이트는 click과 같은 우선순위가 높은 업데이트에 순서를 양보합니다.</p>\n<p>Transition 중 일어나는 업데이트는 다시 일시 중단된(re-suspended) 콘텐츠에 대한 fallback을 표시하지 않으므로, 사용자가 업데이트를 렌더링하는 동안 계속하여 상호 작용 할 수 있도록 해줍니다.</p>\n<p><code class=\"gatsby-code-text\">React.startTransition</code>는 <code class=\"gatsby-code-text\">isPending</code> 플래그를 제공하지 않습니다. Transition의 대기 상태(pending status)를 추적하려면 <a href=\"/docs/hooks-reference.html#usetransition\"><code class=\"gatsby-code-text\">React.useTransition</code></a>를 참고하세요.</p>\n</blockquote>","frontmatter":{"title":"React 최상위 API","next":null,"prev":null},"fields":{"path":"content/docs/reference-react.md","slug":"docs/react-api.html"}}},"pageContext":{"slug":"docs/react-api.html"}},"staticQueryHashes":[]}