{"componentChunkName":"component---src-templates-docs-js","path":"/docs/react-component.html","result":{"data":{"markdownRemark":{"html":"<p>Ця сторінка містить API довідник для визначення класового компонента React. Ми припускаємо, що ви знайомі з фундаментальними концепціями React, такими як <a href=\"/docs/components-and-props.html\">Компоненти та пропси</a>, а також <a href=\"/docs/state-and-lifecycle.html\">Стан і життєвий цикл</a>. Якщо ні, то спочатку ознайомтеся з ними.</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<p>React дозволяє вам визначати компоненти як класи чи функції. Компоненти визначені як класи, наразі надають більше можливостей, які детально описані на цій сторінці. Щоб визначити класовий React-компонент, вам потрібно розширити <code class=\"gatsby-code-text\">React.Component</code>:</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\">Welcome</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\">Привіт, </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>Єдиний метод, який ви <em>зобов’язані</em> визначити в підкласі <code class=\"gatsby-code-text\">React.Component</code> називається <a href=\"#render\"><code class=\"gatsby-code-text\">render()</code></a>. Всі інші методи описані на цій сторінці є необов’язковими.</p>\n<p><strong>Ми наполегливо рекомендуємо, щоб ви утримались від створення власних базових класів компонента.</strong> У компонентах React, <a href=\"/docs/composition-vs-inheritance.html\">повторне використання коду в першу чергу досягається за допомогою композиції, а не наслідування</a>.</p>\n<blockquote>\n<p>Примітка:</p>\n<p>React не змушує вас використовувати синтаксис класів ES6. Якщо ви намагаєтесь уникати його, натомість ви можете використовувати <code class=\"gatsby-code-text\">create-react-class</code> модуль чи схожу власну абстракцію. Перегляньте <a href=\"/docs/react-without-es6.html\">Використання React без ES6</a> щоб дізнатися більше.</p>\n</blockquote>\n<h3 id=\"the-component-lifecycle\"><a href=\"#the-component-lifecycle\" 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>Кожен компонент має декілька “методів життєвого циклу”, які ви можете перевизначати, щоб запускати код в певний момент часу. <strong>Ви можете використовувати <a href=\"http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">цю діаграму життєвого циклу</a> як шпаргалку.</strong> В списку нижче найчастіше вживані методи життєвого циклу виділені <strong>напівжирним</strong>. Решта існують лише для випадків, що трапляються відносно нечасто.</p>\n<h4 id=\"mounting\"><a href=\"#mounting\" 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>Монтування </h4>\n<p>Ці методи викликаються в наступному порядку, коли екземпляр компонента створюється і вставляється в DOM:</p>\n<ul>\n<li><a href=\"#constructor\"><strong><code class=\"gatsby-code-text\">constructor()</code></strong></a></li>\n<li><a href=\"#static-getderivedstatefromprops\"><code class=\"gatsby-code-text\">static getDerivedStateFromProps()</code></a></li>\n<li><a href=\"#render\"><strong><code class=\"gatsby-code-text\">render()</code></strong></a></li>\n<li><a href=\"#componentdidmount\"><strong><code class=\"gatsby-code-text\">componentDidMount()</code></strong></a></li>\n</ul>\n<blockquote>\n<p>Примітка:</p>\n<p>Ці методи вважаються застарілими і ви маєте <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">уникати їх</a> в новому коді:</p>\n<ul>\n<li><a href=\"#unsafe_componentwillmount\"><code class=\"gatsby-code-text\">UNSAFE_componentWillMount()</code></a></li>\n</ul>\n</blockquote>\n<h4 id=\"updating\"><a href=\"#updating\" 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>Оновлення </h4>\n<p>Оновлення може бути спричиненим зміною пропсів чи стану. Ці методи викликаються в наступному порядку, коли компонент повторно рендериться:</p>\n<ul>\n<li><a href=\"#static-getderivedstatefromprops\"><code class=\"gatsby-code-text\">static getDerivedStateFromProps()</code></a></li>\n<li><a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a></li>\n<li><a href=\"#render\"><strong><code class=\"gatsby-code-text\">render()</code></strong></a></li>\n<li><a href=\"#getsnapshotbeforeupdate\"><code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code></a></li>\n<li><a href=\"#componentdidupdate\"><strong><code class=\"gatsby-code-text\">componentDidUpdate()</code></strong></a></li>\n</ul>\n<blockquote>\n<p>Примітка:</p>\n<p>Ці методи вважаються застарілими і ви маєте <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">уникати їх</a> в новому коді:</p>\n<ul>\n<li><a href=\"#unsafe_componentwillupdate\"><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code></a></li>\n<li><a href=\"#unsafe_componentwillreceiveprops\"><code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code></a></li>\n</ul>\n</blockquote>\n<h4 id=\"unmounting\"><a href=\"#unmounting\" 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>Демонтування </h4>\n<p>Цей метод викликається, коли компонент видаляється з DOM:</p>\n<ul>\n<li><a href=\"#componentwillunmount\"><strong><code class=\"gatsby-code-text\">componentWillUnmount()</code></strong></a></li>\n</ul>\n<h4 id=\"error-handling\"><a href=\"#error-handling\" 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>Обробка помилок </h4>\n<p>Наступні методи викликаються, якщо виникла помилка під час рендерингу в методі житєвого циклу чи конструкторі будь-якого дочірнього компонента.</p>\n<ul>\n<li><a href=\"#static-getderivedstatefromerror\"><code class=\"gatsby-code-text\">static getDerivedStateFromError()</code></a></li>\n<li><a href=\"#componentdidcatch\"><code class=\"gatsby-code-text\">componentDidCatch()</code></a></li>\n</ul>\n<h3 id=\"other-apis\"><a href=\"#other-apis\" 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>Інші API </h3>\n<p>Кожен компонент також надає деякі інші API:</p>\n<ul>\n<li><a href=\"#setstate\"><code class=\"gatsby-code-text\">setState()</code></a></li>\n<li><a href=\"#forceupdate\"><code class=\"gatsby-code-text\">forceUpdate()</code></a></li>\n</ul>\n<h3 id=\"class-properties\"><a href=\"#class-properties\" 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<ul>\n<li><a href=\"#defaultprops\"><code class=\"gatsby-code-text\">defaultProps</code></a></li>\n<li><a href=\"#displayname\"><code class=\"gatsby-code-text\">displayName</code></a></li>\n</ul>\n<h3 id=\"instance-properties\"><a href=\"#instance-properties\" 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<ul>\n<li><a href=\"#props\"><code class=\"gatsby-code-text\">props</code></a></li>\n<li><a href=\"#state\"><code class=\"gatsby-code-text\">state</code></a></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>Довідка </h2>\n<h3 id=\"commonly-used-lifecycle-methods\"><a href=\"#commonly-used-lifecycle-methods\" 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-компонентів. <strong>Для наочної ілюстрації, перегляньте <a href=\"http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">цю діаграму життєвого циклу</a>.</strong></p>\n<h3 id=\"render\"><a href=\"#render\" 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\">render()</code> </h3>\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></code></pre></div>\n<p>Метод <code class=\"gatsby-code-text\">render()</code> — єдиний необхідний метод в класових компонентах.</p>\n<p>Під час виклику він перевіряє <code class=\"gatsby-code-text\">this.props</code> та <code class=\"gatsby-code-text\">this.state</code> і повертає один з наступних типів:</p>\n<ul>\n<li><strong>React-елементи.</strong> Зазвичай створені за допомогою <a href=\"/docs/introducing-jsx.html\">JSX</a>. Наприклад, <code class=\"gatsby-code-text\">&lt;div /&gt;</code> і <code class=\"gatsby-code-text\">&lt;MyComponent /&gt;</code> є React-елементами, які інструктують React відрендерити вузол DOM або інший компонент визначений користувачем, відповідно.</li>\n<li><strong>Масиви та фрагменти.</strong> Дозволяють повернути декілька елементів під час рендерингу. Перегляньте документацію для <a href=\"/docs/fragments.html\">фрагментів</a>, щоб дізнатися більше.</li>\n<li><strong>Портали</strong>. Дозволють рендерити дочірні елементи в іншому піддереві DOM. Перегляньте документацію для <a href=\"/docs/portals.html\">порталів</a>, щоб дізнатися більше.</li>\n<li><strong>Рядки і числа.</strong> Будуть відрендерені як текстові вузли в DOM.</li>\n<li><strong>Логічні значення чи <code class=\"gatsby-code-text\">null</code></strong>. Не рендерять нічого. (Існують, здебільшого, для підтримки шаблону <code class=\"gatsby-code-text\">return test &amp;&amp; &lt;Child /&gt;</code>, де <code class=\"gatsby-code-text\">test</code> — логічне значення.)</li>\n</ul>\n<p>Функція <code class=\"gatsby-code-text\">render()</code> має бути чистою, а це означає, що вона не змінює стан компонента, повертає однаковий результат при кожному виклику і не взаємодіє з браузером напряму.</p>\n<p>Якщо вам потрібно взаємодіяти з браузером, виконуйте необхідні дії в <code class=\"gatsby-code-text\">componentDidMount()</code> чи інших методах життєвого циклу. Збереження <code class=\"gatsby-code-text\">render()</code> чистим, робить компонент легшим для розуміння.</p>\n<blockquote>\n<p>Примітка</p>\n<p><code class=\"gatsby-code-text\">render()</code> не викличеться, якщо <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> повертає false.</p>\n</blockquote>\n<hr>\n<h3 id=\"constructor\"><a href=\"#constructor\" 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\">constructor()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span></code></pre></div>\n<p><strong>Якщо ви не ініціалізуєте стан і не прив’язуєте методи, вам не потрібно реалізовувати конструктор у вашому React-компоненті.</strong></p>\n<p>Конструктор для React-компонента викликається до того, як він буде примонтований. При реалізації конструктора для підкласу <code class=\"gatsby-code-text\">React.Component</code>, ви маєте викликати <code class=\"gatsby-code-text\">super(props)</code> перед будь-яким іншим виразом. У іншому випадку, <code class=\"gatsby-code-text\">this.props</code> буде невизначеним в конструкторі, що може призвести до помилок.</p>\n<p>Як правило, у React конструктори використовуються лише для двох цілей:</p>\n<ul>\n<li>Ініціалізація <a href=\"/docs/state-and-lifecycle.html\">локального стану</a> шляхом присвоєння об’єкта <code class=\"gatsby-code-text\">this.state</code>.</li>\n<li>Прив’язка методів <a href=\"/docs/handling-events.html\">обробника подій</a> до екземпляру.</li>\n</ul>\n<p><strong>Не варто викликати <code class=\"gatsby-code-text\">setState()</code></strong> у <code class=\"gatsby-code-text\">constructor()</code>. Натомість, якщо компонент потребує використання локального стану, <strong>присвоюйте початкове значення <code class=\"gatsby-code-text\">this.state</code></strong> безпосередньо в конструкторі:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><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  <span class=\"token comment\">// Не викликайте this.setState() тут!</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> counter<span class=\"token operator\">:</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>handleClick <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">handleClick</span><span class=\"token punctuation\">.</span><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><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\">this.state</code> напряму. У всіх інших методах для цього слід використовувати <code class=\"gatsby-code-text\">this.setState()</code>.</p>\n<p>Уникайте додавання будь-яких побічних ефектів чи підписок у конструкторі. Для таких випадків використовуйте <code class=\"gatsby-code-text\">componentDidMount()</code>.</p>\n<blockquote>\n<p>Примітка</p>\n<p><strong>Уникайте копіювання пропсів в стан! Це поширена помилка:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><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 <span class=\"token comment\">// Не робіть цього!</span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> color<span class=\"token operator\">:</span> props<span class=\"token punctuation\">.</span>color <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\">this.props.color</code> напряму), і приводить до помилок (оновлення пропу <code class=\"gatsby-code-text\">color</code> не буде зафіксоване в стані).</p>\n<p><strong>Використовуйте даний підхід лише тоді, коли ви навмисно хочете ігнорувати оновлення пропу.</strong> В такому випадку є сенс перейменувати проп в <code class=\"gatsby-code-text\">initialColor</code> чи <code class=\"gatsby-code-text\">defaultColor</code>. Потім ви можете змусити компонент “скинути” його внутрішній стан, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">змінивши його <code class=\"gatsby-code-text\">key</code></a>, за необхідності.</p>\n<p>Прочитайте нашу <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">статтю в блозі про уникнення похідного стану</a>, щоб дізнатися що робити, якщо вам потрібен деякий стан, залежний від пропсів.</p>\n</blockquote>\n<hr>\n<h3 id=\"componentdidmount\"><a href=\"#componentdidmount\" 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\">componentDidMount()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentDidMount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">componentDidMount()</code> викликається відразу після монтування компонента (вставки в DOM-дерево). Ініціалізація, яка потребує DOM-вузли, має знаходитись тут. Якщо вам потрібно завантажити дані з віддаленого сервера, це гарне місце для створення мережевого запиту.</p>\n<p>Також цей метод є вдалим місцем для налаштування підписок. Якщо ви це зробите, то не забудьте відписатись в <code class=\"gatsby-code-text\">componentWillUnmount()</code>.</p>\n<p>Ви <strong>можете негайно викликати <code class=\"gatsby-code-text\">setState()</code></strong> в <code class=\"gatsby-code-text\">componentDidMount()</code>. Це запустить додатковий рендер, але це станеться до того, як браузер оновить екран. Це гарантує те, що навіть якщо <code class=\"gatsby-code-text\">render()</code> в цьому випадку буде викликаний двічі, користувач не побачить проміжного стану. Обережно використовуйте цей підхід, тому що він часто приводить до проблем з продуктивністю. У більшості випадків, замість цього у вас має бути можливість присвоїти початковий стан у <code class=\"gatsby-code-text\">constructor()</code>. Однак, це може бути необхідно для таких випадків як модальні вікна і спливаючі підказки, коли вам потрібно відрендерити щось, що залежить від розмірів та позиції вузла DOM.</p>\n<hr>\n<h3 id=\"componentdidupdate\"><a href=\"#componentdidupdate\" 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\">componentDidUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentDidUpdate</span><span class=\"token punctuation\">(</span>prevProps<span class=\"token punctuation\">,</span> prevState<span class=\"token punctuation\">,</span> snapshot<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">componentDidUpdate()</code> викликається відразу після оновлення. Цей метод не викликається під час першого рендеру.</p>\n<p>Використовуйте це як можливість працювати з DOM при оновленні компонента. Також це хороше місце для мережевих запитів, якщо ви порівнюєте поточні пропси з попередніми (наприклад, мережевий запит може бути не потрібним, якщо проп не змінився).</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentDidUpdate</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">prevProps</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Типове використання (не забудьте порівняти пропси):</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>userID <span class=\"token operator\">!==</span> prevProps<span class=\"token punctuation\">.</span>userID<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">fetchData</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>userID<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Ви <strong>можете відразу викликати <code class=\"gatsby-code-text\">setState()</code></strong> у <code class=\"gatsby-code-text\">componentDidUpdate()</code>, але зверніть увагу, що цей виклик <strong>має бути обгорнутий в умову</strong> як у прикладі вище, інакше можна спричинити безкінечний цикл. Крім того, це спричинить додатковий повторний рендер який, хоч і не буде видимий користувачу, може вплинути на продуктивність компонента. Якщо ви намагаєтесь “дзеркально відобразити” певний стан в пропі, що приходять зверху, розгляньте безпосереднє використання пропу. Докладніше про те, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">чому копіювання пропсів в стан спричиняє помилки</a>.</p>\n<p>Якщо ваш компонент реалізує метод життєвого циклу <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> (що трапляється доволі рідко), значення, яке він повертає, буде передане третім “snapshot” параметром в <code class=\"gatsby-code-text\">componentDidUpdate()</code>. В іншому випадку цей параметр буде невизначеним.</p>\n<blockquote>\n<p>Примітка</p>\n<p><code class=\"gatsby-code-text\">componentDidUpdate()</code> не викликається, якщо <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> повертає false.</p>\n</blockquote>\n<hr>\n<h3 id=\"componentwillunmount\"><a href=\"#componentwillunmount\" 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\">componentWillUnmount()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentWillUnmount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">componentWillUnmount()</code> викликається безпосередньо перед тим як компонент буде демонтовано і знищено. Виконуйте будь-яку необхідну очистку в цьому методі, таку як скасування таймерів, мережевих запитів чи підписок створених у <code class=\"gatsby-code-text\">componentDidMount()</code>.</p>\n<p>Ви <strong>не повинні викликати <code class=\"gatsby-code-text\">setState()</code></strong> у <code class=\"gatsby-code-text\">componentWillUnmount()</code>, тому що компонент не буде повторно рендеритись. Як тільки екземпляр компонента буде демонтований, він ніколи не буде примонтованим знову.</p>\n<hr>\n<h3 id=\"rarely-used-lifecycle-methods\"><a href=\"#rarely-used-lifecycle-methods\" 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>Методи в цьому розділі відповідають малопоширеним випадкам використання. Вони є корисними час від часу, але швидше за все, більшість ваших компонентів не потребують жодного з них. <strong>Ви можете побачити більшість наведених нижче методів на <a href=\"http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">цій діаграмі життєвого циклу</a> якщо натиснете прапорець “Show less common lifecycles” зверху сторінки.</strong></p>\n<h3 id=\"shouldcomponentupdate\"><a href=\"#shouldcomponentupdate\" 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\">shouldComponentUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">shouldComponentUpdate</span><span class=\"token punctuation\">(</span>nextProps<span class=\"token punctuation\">,</span> nextState<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Використовуйте <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>, щоб дати знати React, чи поточна зміна стану і пропсів не впливає на виведення компонента. Поведінка за замовчуванням полягає в повторному рендері при кожній зміні стану і в переважній більшості випадків ви маєте покладатись на поведінку за замовчуванням.</p>\n<p><code class=\"gatsby-code-text\">shouldComponentUpdate()</code> викликається перед рендерингом при отриманні нових пропсів і стану. За замовчуванням має значення <code class=\"gatsby-code-text\">true</code>. Цей метод не викликається при першому рендері чи коли використовується <code class=\"gatsby-code-text\">forceUpdate()</code>.</p>\n<p>Цей метод існує лише в якості <strong><a href=\"/docs/optimizing-performance.html\">оптимізації продуктивності</a>.</strong> Не покладайтесь на нього, щоб “запобігти” рендерингу, оскільки це може привести до помилок. <strong>Розгляньте можливість використання вбудованого <a href=\"/docs/react-api.html#reactpurecomponent\"><code class=\"gatsby-code-text\">PureComponent</code></a></strong> замість написання власного <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>. <code class=\"gatsby-code-text\">PureComponent</code> виконує поверхове порівняння пропсів та стану і зменшує шанс того, що ви пропустите необхідне оновлення.</p>\n<p>Якщо ви впевнені, що ви хочете реалізувати його власноруч, ви можете порівняти <code class=\"gatsby-code-text\">this.props</code> із <code class=\"gatsby-code-text\">nextProps</code> та <code class=\"gatsby-code-text\">this.state</code> із <code class=\"gatsby-code-text\">nextState</code>, і повернути <code class=\"gatsby-code-text\">false</code>, щоб сказати React, що це оновлення можна пропустити. Зверніть увагу на те, що повернення <code class=\"gatsby-code-text\">false</code> не запобігає повторному рендерингу дочірніх компонентів, коли <em>їх</em> стан змінюється.</p>\n<p>Ми не рекомендуємо робити глибокі порівняння або використовувати <code class=\"gatsby-code-text\">JSON.stringify()</code> у <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>. Це надзвичайно неефективно і негативно вплине на продуктивність.</p>\n<p>Наразі, якщо <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> повертає <code class=\"gatsby-code-text\">false</code>, тоді <a href=\"#unsafe_componentwillupdate\"><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code></a>, <a href=\"#render\"><code class=\"gatsby-code-text\">render()</code></a>, і <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate()</code></a> не будуть викликані. У майбутньому React може розглядати <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> як пораду, а не строгу вимогу, і повернення <code class=\"gatsby-code-text\">false</code> може спричинити повторний рендеринг компоненту, як зазвичай.</p>\n<hr>\n<h3 id=\"static-getderivedstatefromprops\"><a href=\"#static-getderivedstatefromprops\" 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\">static getDerivedStateFromProps()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromProps</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">,</span> state<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">getDerivedStateFromProps</code> викликається безспосередньо перед викликом методу render, як при першому рендерингу, так і при всіх наступних оновленнях. Він має повернути об’єкт для оновлення стану або <code class=\"gatsby-code-text\">null</code>, щоб не оновлювати нічого.</p>\n<p>Цей метод існує для <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#when-to-use-derived-state\">малопоширених випадків</a> коли стан залежить від змін в пропсах з часом. Наприклад, він може бути корисним для реалізації компоненту <code class=\"gatsby-code-text\">&lt;Transition&gt;</code> котрий порівнює свої попередні і наступні дочірні елементи, щоб вирішити котрі з них потрібно анімувати для появи і зникнення.</p>\n<p>Успадкування стану приводить до багатослівного коду і робить ваші компоненти важчими для розуміння.\n<a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">Переконайтеся, що ви знайомі з більш простими альтернативами:</a></p>\n<ul>\n<li>Якщо вам потрібно <strong>виконати побічний ефект</strong> (наприклад, вибірку даних чи анімацію) у відповідь на зміну пропсів, використовуйте натомість метод <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate</code></a>.</li>\n<li>Якщо вам потрібно <strong>повторно обрахувати якісь дані лише коли проп змінюється</strong>, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#what-about-memoization\">використовуйте натомість допоміжний метод мемоізації</a>.</li>\n<li>Якщо ви хочете <strong>“скинути” деякий стан при зміні пропу</strong>, подумайте про те, щоб натомість зробити компонент <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-controlled-component\">повністю контрольованим</a> або <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">повністю неконтрольованим з <code class=\"gatsby-code-text\">key</code></a>.</li>\n</ul>\n<p>Цей метод не має доступу до екземпляра компонента. Якщо ви бажаєте, ви можете повторно використовувати код між <code class=\"gatsby-code-text\">getDerivedStateFromProps()</code> й іншими методами класу витягуючи чисті функції пропсів і стану компонента за межі класу.</p>\n<p>Зверніть увагу, що цей метод викликається при <em>кожному</em> рендерингу, незалежно від причини. На відміну від <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps</code>, котрий запускається лиш тоді, коли батьківський компонент викликає повторний рендеринг, а не як результат локального <code class=\"gatsby-code-text\">setState</code>.</p>\n<hr>\n<h3 id=\"getsnapshotbeforeupdate\"><a href=\"#getsnapshotbeforeupdate\" 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\">getSnapshotBeforeUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">getSnapshotBeforeUpdate</span><span class=\"token punctuation\">(</span>prevProps<span class=\"token punctuation\">,</span> prevState<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> викликається безпосередньо перед  тим, як останній відрендерений вивід буде зафіксовано, наприклад в DOM. Він дозволяє вашому компоненту захопити деяку інформацію з DOM (наприклад, позицію прокрутки) перед її можливою зміною. Будь-яке значення повернуте цим методом життєвого циклу, буде передане як параметр в <code class=\"gatsby-code-text\">componentDidUpdate()</code>.</p>\n<p>Цей випадок не поширений, але він може бути в інтерфейсах користувача, таких як ланцюжок повідомлень в чаті, який має оброблювати позицію прокрутки особливим чином.</p>\n<p>Значення знімку (або <code class=\"gatsby-code-text\">null</code>) має бути повернуте.</p>\n<p>Наприклад:</p>\n<p><div class=\"gatsby-highlight\">\n        <pre class=\"gatsby-code-jsx\"><code><span class=\"token keyword\">class</span> <span class=\"token class-name\">ScrollingList</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    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>listRef <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 punctuation\">}</span>\n\n  <span class=\"token function\">getSnapshotBeforeUpdate</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">prevProps<span class=\"token punctuation\">,</span> prevState</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Чи додаємо ми нові позиції у список?</span>\n    <span class=\"token comment\">// Захоплюємо позицію прокрутки, щоб можна було налаштувати прокрутку пізніше.</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>prevProps<span class=\"token punctuation\">.</span>list<span class=\"token punctuation\">.</span>length <span class=\"token operator\">&lt;</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>list<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> list <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>listRef<span class=\"token punctuation\">.</span>current<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span> list<span class=\"token punctuation\">.</span>scrollHeight <span class=\"token operator\">-</span> list<span class=\"token punctuation\">.</span>scrollTop<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">componentDidUpdate</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">prevProps<span class=\"token punctuation\">,</span> prevState<span class=\"token punctuation\">,</span> snapshot</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Якщо ми маємо значення знімку, ми лише додаємо нові позиції.</span>\n    <span class=\"token comment\">// Налаштувати прокрутку так, що ці нові позиції не зсунуть попередні з зони огляду.</span>\n    <span class=\"token comment\">// (snapshot тут — це значення повернуте з getSnapshotBeforeUpdate)</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>snapshot <span class=\"token operator\">!==</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> list <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>listRef<span class=\"token punctuation\">.</span>current<span class=\"token punctuation\">;</span>\n      list<span class=\"token punctuation\">.</span>scrollTop <span class=\"token operator\">=</span> list<span class=\"token punctuation\">.</span>scrollHeight <span class=\"token operator\">-</span> snapshot<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <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=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</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>listRef<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span><span class=\"token comment\">/* ...вміст... */</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n        </div></p>\n<p>У наведених вище прикладах є важливим прочитати <code class=\"gatsby-code-text\">scrollHeight</code> властивість у <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate</code>, тому що можуть виникати затримки між “рендер” етапами життєвого циклу (таких як <code class=\"gatsby-code-text\">render</code>) і етапами “фіксації” життєвого циклу (такими як <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate</code> і <code class=\"gatsby-code-text\">componentDidUpdate</code>).</p>\n<hr>\n<h3 id=\"error-boundaries\"><a href=\"#error-boundaries\" 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><a href=\"/docs/error-boundaries.html\">Запобіжники</a> — це React-компоненти, котрі перехоплюють помилки JavaScript будь-де в їхньому дереві дочірніх компонентів, логують їх і відображають резервний інтерфейс користувача, замість невалідного дерева компонентів. Запобіжники перехоплюють помилки протягом рендерингу, в методах життєвого циклу і конструкторах всього дерева під ними.</p>\n<p>Класовий компонент стає запобіжником, якщо він визначає один (або обидва) з методів життєвого циклу — <code class=\"gatsby-code-text\">static getDerivedStateFromError()</code> чи <code class=\"gatsby-code-text\">componentDidCatch()</code>. Оновлення стану з цих методів дозволить вам перехопити необроблену помилку JavaScript у дереві нижче і відобразити резервний інтерфейс користувача.</p>\n<p>Використовуйте запобіжники тільки для відновлення від несподіваних виключних ситуацій; <strong>не намагайтесь використовувати їх для управління потоком.</strong></p>\n<p>Щоб дізнатися більше, перегляньте <a href=\"/blog/2017/07/26/error-handling-in-react-16.html\"><em>Обробка помилок у React 16</em></a>.</p>\n<blockquote>\n<p>Примітка</p>\n<p>Запобіжники перехоплюють лише помилки в компонентах у дереві <strong>нижче</strong> за них. Запобіжник не перехоплює помилки, що виникли в ньому.</p>\n</blockquote>\n<h3 id=\"static-getderivedstatefromerror\"><a href=\"#static-getderivedstatefromerror\" 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\">static getDerivedStateFromError()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromError</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Цей метод життєвого циклу викликається після того, як компонент-нащадок згенерує помилку.\nЯк параметр він отримує помилку, що була згенерована і повинен повернути значення, щоб оновити стан.</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">ErrorBoundary</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    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromError</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">// Оновити стан, щоб наступний рендеринг показав резервний інтерфейс користувача.</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token punctuation\">}</span></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=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>hasError<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">      <span class=\"token comment\">// Ви можете рендерити будь-який власний резервний інтерфейс користувача</span></span><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>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Щось пішло не так.</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></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token punctuation\">}</span></span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>children<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<blockquote>\n<p>Примітка</p>\n<p><code class=\"gatsby-code-text\">getDerivedStateFromError()</code> викликається на “render” етапі, а отже побічні ефекти не допускаються.\nДля таких випадків використовуйте <code class=\"gatsby-code-text\">componentDidCatch()</code>.</p>\n</blockquote>\n<hr>\n<h3 id=\"componentdidcatch\"><a href=\"#componentdidcatch\" 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\">componentDidCatch()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentDidCatch</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">,</span> info<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Цей метод життєвого циклу викликається після того, як компонент-нащадок згенерує помилку.\nВі отримує два параметри:</p>\n<ol>\n<li><code class=\"gatsby-code-text\">error</code> — Помилка, яка була згенерована.</li>\n<li><code class=\"gatsby-code-text\">info</code> — Об’єкт з ключем <code class=\"gatsby-code-text\">componentStack</code>, який містить <a href=\"/docs/error-boundaries.html#component-stack-traces\">інформацію про компонент, який згенерував помилку</a>.</li>\n</ol>\n<p><code class=\"gatsby-code-text\">componentDidCatch()</code> викликається на етапі “фіксації”, а отже побічні ефекти допустимі.\nВін має використовуватись для таких речей, як логування помилок:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">ErrorBoundary</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    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromError</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Оновити стан, щоб наступний рендеринг показав резервний інтерфейс користувача.</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token function\">componentDidCatch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error<span class=\"token punctuation\">,</span> info</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">// Приклад \"componentStack\":</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">//   in ComponentThatThrows (created by App)</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">//   in ErrorBoundary (created by App)</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">//   in div (created by App)</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">//   in App</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token function\">logComponentStackToMyService</span><span class=\"token punctuation\">(</span>info<span class=\"token punctuation\">.</span>componentStack<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token punctuation\">}</span></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\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>hasError<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// Ви можете рендерити будь-який власний резервний інтерфейс користувача</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\">Щось пішло не так.</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\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>children<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<blockquote>\n<p>Примітка</p>\n<p>При виникненні помилки, ви можете рендерити резервний інтерфейс користувача <code class=\"gatsby-code-text\">componentDidCatch()</code> викликом <code class=\"gatsby-code-text\">setState</code>, але така поведінка буде вважатися застарілою в наступному релізі.\nНатомість використовуйте <code class=\"gatsby-code-text\">static getDerivedStateFromError()</code> для обробки резервного рендерингу.</p>\n</blockquote>\n<hr>\n<h3 id=\"legacy-lifecycle-methods\"><a href=\"#legacy-lifecycle-methods\" 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>Нижченаведені методи життєвого циклу є “застарілими”. Вони досі працюють, але ми не радимо використовувати їх у новому коді. Ви можете дізнатися більше про перехід від застарілих методів життєвого циклу в <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">цій статті</a>.</p>\n<h3 id=\"unsafe_componentwillmount\"><a href=\"#unsafe_componentwillmount\" 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\">UNSAFE_componentWillMount()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">UNSAFE_componentWillMount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<blockquote>\n<p>Примітка</p>\n<p>Цей метод раніше називався <code class=\"gatsby-code-text\">componentWillMount</code>. Попереднє ім’я продовжить працювати до версії 17. Використовуйте <a href=\"https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code> codemod</a>, щоб автоматично оновити ваші компоненти.</p>\n</blockquote>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillMount()</code> викликаєтся безпосередньо перед монтуванням. Він викликається перед <code class=\"gatsby-code-text\">render()</code>, а тому синхронний виклик <code class=\"gatsby-code-text\">setState()</code> в цьому методі не викличе повторний рендеринг. У загальному випадку, ми радимо використовувати <code class=\"gatsby-code-text\">constructor()</code> для ініціалізації стану.</p>\n<p>Уникайте додавання будь-яких побічних ефектів чи підписок в цьому методі. Для таких випадків використовуйте <code class=\"gatsby-code-text\">componentDidMount()</code>.</p>\n<p>Це єдиний метод життєвого циклу, що викликається серверним рендерингом.</p>\n<hr>\n<h3 id=\"unsafe_componentwillreceiveprops\"><a href=\"#unsafe_componentwillreceiveprops\" 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\">UNSAFE_componentWillReceiveProps()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">UNSAFE_componentWillReceiveProps</span><span class=\"token punctuation\">(</span>nextProps<span class=\"token punctuation\">)</span></code></pre></div>\n<blockquote>\n<p>Примітка</p>\n<p>Цей метод раніше називався <code class=\"gatsby-code-text\">componentWillReceiveProps</code>. Попереднє ім’я продовжить працювати до версії 17. Використовуйте <a href=\"https://github.%D1%81om/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code> codemod</a>, щоб автоматично оновити ваші компоненти.</p>\n</blockquote>\n<blockquote>\n<p>Примітка:</p>\n<p>Використання цього методу часто приводить до помилок і невідповідностей.</p>\n<ul>\n<li>Якщо вам потрібно <strong>виконати побічний ефект</strong> (наприклад, вибірку даних чи анімацію) у відповідь на зміну пропсів, замість нього використовуйте <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate</code></a>.</li>\n<li>Якщо ви використовували <code class=\"gatsby-code-text\">componentWillReceiveProps</code> для <strong>повторного обрахування деяких даних лише при зміні пропу</strong>, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#what-about-memoization\">використовуйте натомість допоміжний метод мемоізації</a>.</li>\n<li>Якщо ви використовували <code class=\"gatsby-code-text\">componentWillReceiveProps</code> для <strong>“скидання” деякого стану при зміні пропу</strong>, подумайте про те, щоб натомість зробити компонент <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-controlled-component\">повністю контрольованим</a> або <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">повністю неконтрольованим з <code class=\"gatsby-code-text\">key</code></a>.</li>\n</ul>\n<p>Для інших випадків, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">перегляньте поради в цій статті про похідний стан</a>.</p>\n</blockquote>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> викликається перед тим, як примонтований компонент отримує нові пропси. Якщо вам потрібно оновити стан у відповідь на зміну пропсів (наприклад, щоб скинути його), ви можете порівняти <code class=\"gatsby-code-text\">this.props</code> і <code class=\"gatsby-code-text\">nextProps</code> в цьому методі та виконати переходи стану, використовуючи <code class=\"gatsby-code-text\">this.setState()</code>.</p>\n<p>Зверніть увагу, що якщо батьківський компонент спричиняє повторний рендер, то цей метод буде викликаний, навіть якщо пропси не змінились. Переконайтеся, що ви порівнюєте поточні і наступні значення тільки тоді, коли ви хочете обробити зміни.</p>\n<p>React не викликає <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> для початкових пропсів під час <a href=\"#mounting\">монтування</a>. Він викликається лише тоді, коли деякі пропси компонента можуть оновитись. Виклик <code class=\"gatsby-code-text\">this.setState()</code>, як правило, не викликає <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code>.</p>\n<hr>\n<h3 id=\"unsafe_componentwillupdate\"><a href=\"#unsafe_componentwillupdate\" 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\">UNSAFE_componentWillUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">UNSAFE_componentWillUpdate</span><span class=\"token punctuation\">(</span>nextProps<span class=\"token punctuation\">,</span> nextState<span class=\"token punctuation\">)</span></code></pre></div>\n<blockquote>\n<p>Примітка</p>\n<p>Цей метод раніше називався <code class=\"gatsby-code-text\">componentWillUpdate</code>. Попереднє ім’я продовжить працювати до версії 17. Використовуйте <a href=\"https://github.%D1%81om/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code> codemod</a>, щоб автоматично оновити ваші компоненти.</p>\n</blockquote>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> викликається безпосередньо перед рендерингом, коли компонент отримує нові пропси чи стан. Використовуйте це, як можливість для виконання підготовки перед оновленням. Цей метод не викликається при першому рендері.</p>\n<p>Зверніть увагу, що ви не можете викликати <code class=\"gatsby-code-text\">this.setState()</code> тут; ви також не повинні робити будь-що (наприклад, відправляти дію Redux), що спричинить оновлення React-компоненту перед поверненням з <code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code>.</p>\n<p>Як правило, цей метод можна замінити на <code class=\"gatsby-code-text\">componentDidUpdate()</code>. Якщо ви зчитуєте з DOM в цьому методі (наприклад, для збереження позиції прокрутки), ви можете перемістити цю логіку в <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code>.</p>\n<blockquote>\n<p>Примітка</p>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> не викликається, якщо <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> повертає false.</p>\n</blockquote>\n<hr>\n<h2 id=\"other-apis-1\"><a href=\"#other-apis-1\" 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>Інші API </h2>\n<p>На відміну від вищенаведених методів життєвого циклу (які React викликає для вас), <em>ви</em> можете викликати методи нижче з ваших компонентів.</p>\n<p>Їх всього два: <code class=\"gatsby-code-text\">setState()</code> і <code class=\"gatsby-code-text\">forceUpdate()</code>.</p>\n<h3 id=\"setstate\"><a href=\"#setstate\" 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\">setState()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span>updater<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>callback<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">setState()</code> ставить в чергу оновлення стану компонента і повідомляє React, що цей компонент і його нащадки мають бути повторно відрендерені з оновленим станом. Це основний метод, який ви використовуєте для оновлення інтерфейсу користувача у відповідь на обробники подій і відповіді сервера.</p>\n<p>Думайте про <code class=\"gatsby-code-text\">setState()</code> як про <em>запит</em>, а не як про команду, що має бути негайно виконана для оновлення компонента. Для кращої наочної продуктивності, React може відкласти виклик і тоді оновити кілька компонентів за один прохід. React не гарантує негайного застосування змін стану.</p>\n<p><code class=\"gatsby-code-text\">setState()</code> не завжди відразу оновлює компонент. Цей метод може групувати чи відкладати оновлення на потім. Це робить зчитування <code class=\"gatsby-code-text\">this.state</code> відразу після виклику <code class=\"gatsby-code-text\">setState()</code> потенційною пасткою. Натомість, використовуйте <code class=\"gatsby-code-text\">componentDidUpdate</code> чи функцію зворотнього виклику <code class=\"gatsby-code-text\">setState</code> (<code class=\"gatsby-code-text\">setState(updater, callback)</code>), обидва підходи гарантовано запустяться після застосування оновлення. Якщо вам потрібно оновити стан на основі поперенього стану, прочитайте про аргумент <code class=\"gatsby-code-text\">updater</code> нижче.</p>\n<p><code class=\"gatsby-code-text\">setState()</code> завжди призводить до повторного рендерингу за умови, що <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> не повертає <code class=\"gatsby-code-text\">false</code>. Якщо використовуються змінні об’єкти і логіка умовного рендерингу не може бути реалізована у <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>, виклик <code class=\"gatsby-code-text\">setState()</code> тільки тоді, коли новий стан відрізняється від попереднього, може запобігти непотрібних повторних рендерингів.</p>\n<p>Перший аргумент — це функція <code class=\"gatsby-code-text\">updater</code> визначена як:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">(</span><span class=\"token parameter\">state<span class=\"token punctuation\">,</span> props</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> stateChange</code></pre></div>\n<p><code class=\"gatsby-code-text\">state</code> — це посилання на стан компонента в момент часу, коли зміна застосовується. Воно не має змінюватись напряму. Замість цього, зміни повинні бути представлені шляхом створення нового об’єкту на основі вхідних даних із <code class=\"gatsby-code-text\">state</code> та <code class=\"gatsby-code-text\">props</code>. Наприклад, ми хочемо збільшити значення в стані на <code class=\"gatsby-code-text\">props.step</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">state<span class=\"token punctuation\">,</span> props</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>counter<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>counter <span class=\"token operator\">+</span> props<span class=\"token punctuation\">.</span>step<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</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\">state</code>, так і <code class=\"gatsby-code-text\">props</code>, отримані функцією оновлення, гарантовано будуть в актуальному стані. Результат функції оновлення буде поверхово об’єднаний із <code class=\"gatsby-code-text\">state</code>.</p>\n<p>Другий параметр <code class=\"gatsby-code-text\">setState()</code> — це необов’язкова функція зворотнього виклику, яка буде виконана після того, як <code class=\"gatsby-code-text\">setState</code> завершив роботу і компонент повторно відрендерився. Зазвичай ми радимо використовувати <code class=\"gatsby-code-text\">componentDidUpdate()</code> для подібної логіки.</p>\n<p>Ви можете передати в <code class=\"gatsby-code-text\">setState()</code> першим аргументом об’єкт, а не функцію:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span>stateChange<span class=\"token punctuation\">[</span><span class=\"token punctuation\">,</span> callback<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Це виконає поверхове об’єднання <code class=\"gatsby-code-text\">stateChange</code> в новий стан, наприклад, для зміни кількості товарів у корзині:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Ця форма запису <code class=\"gatsby-code-text\">setState()</code> також асинхронна і кілька викликів впродовж одного циклу можуть бути згруповані в один. Наприклад, якщо ви спробуєте інкрементувати кількість елементів більше, ніж один раз в одному циклі, результат буде еквівалентний:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"gatsby-code-javascript\"><code class=\"gatsby-code-javascript\">Object<span class=\"token punctuation\">.</span><span class=\"token function\">assign</span><span class=\"token punctuation\">(</span>\n  previousState<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>quantity <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>quantity <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token operator\">...</span>\n<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Наступні виклики перезапишуть попередні значення в цьому циклі і кількість буде інкрементована лише раз. Якщо наступний стан залежить від поточного, ми радимо використовувати форму з функцією оновлення:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">state</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>quantity <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Для більш детальної інформації перегляньте:</p>\n<ul>\n<li><a href=\"/docs/state-and-lifecycle.html\">Стан та життєвий цикл</a></li>\n<li><a href=\"https://stackoverflow.com/a/48610973/458193\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">В подробицях: Коли і чому виклики <code class=\"gatsby-code-text\">setState()</code> групуються?</a></li>\n<li><a href=\"https://github.com/facebook/react/issues/11527#issuecomment-360199710\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">В подробицях: Чому <code class=\"gatsby-code-text\">this.state</code> не оновлюється негайно?</a></li>\n</ul>\n<hr>\n<h3 id=\"forceupdate\"><a href=\"#forceupdate\" 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\">forceUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">component<span class=\"token punctuation\">.</span><span class=\"token function\">forceUpdate</span><span class=\"token punctuation\">(</span>callback<span class=\"token punctuation\">)</span></code></pre></div>\n<p>За замовчуванням, коли стан чи пропси вашого компонента змінюються, він буде повторно відрендерений. Якщо ваш метод <code class=\"gatsby-code-text\">render()</code> залежить від деяких інших даних, за допомогою виклику <code class=\"gatsby-code-text\">forceUpdate()</code> ви можете вказати React, що компонент потребує повторного рендерингу.</p>\n<p>Виклик <code class=\"gatsby-code-text\">forceUpdate()</code> спричинить виклик <code class=\"gatsby-code-text\">render()</code> у компоненті з пропуском <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>. Це викличе звичайні методи життєвого циклу в дочірніх компонентах, включно з <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> для кожного нащадка. React, як і раніше, оновить DOM лише у випадку зміни розмітки.</p>\n<p>Зазвичай краще уникати всіх використань <code class=\"gatsby-code-text\">forceUpdate()</code> і тільки зчитувати <code class=\"gatsby-code-text\">this.props</code> і <code class=\"gatsby-code-text\">this.state</code> в <code class=\"gatsby-code-text\">render()</code>.</p>\n<hr>\n<h2 id=\"class-properties-1\"><a href=\"#class-properties-1\" 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=\"defaultprops\"><a href=\"#defaultprops\" 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\">defaultProps</code> </h3>\n<p><code class=\"gatsby-code-text\">defaultProps</code> можна визначити як властивість класу компонента, щоб встановити пропси за замовчуванням в класі. Це використовується для невизначених пропсів, але не для пропсів зі значенням <code class=\"gatsby-code-text\">null</code>. Наприклад:</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\">CustomButton</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 comment\">// ...</span>\n<span class=\"token punctuation\">}</span>\n\nCustomButton<span class=\"token punctuation\">.</span>defaultProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  color<span class=\"token operator\">:</span> <span class=\"token string\">'синій'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Якщо <code class=\"gatsby-code-text\">props.color</code> не наданий, за замовчуванням буде встановлено значення <code class=\"gatsby-code-text\">&#39;синій&#39;</code>:</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 tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">CustomButton</span></span> <span class=\"token punctuation\">/></span></span> <span class=\"token punctuation\">;</span> <span class=\"token comment\">// props.color буде встановлено в синій</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>Якщо для <code class=\"gatsby-code-text\">props.color</code> встановлено значення <code class=\"gatsby-code-text\">null</code>, то воно залишиться <code class=\"gatsby-code-text\">null</code>:</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 tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">CustomButton</span></span> <span class=\"token attr-name\">color</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span> <span class=\"token punctuation\">;</span> <span class=\"token comment\">// props.color залишиться null</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<hr>\n<h3 id=\"displayname\"><a href=\"#displayname\" 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\">displayName</code> </h3>\n<p>Рядок <code class=\"gatsby-code-text\">displayName</code> використовується для повідомлень при налагодженні. Зазвичай, ви не повинні вказувати його явно, тому що за замовчуванням він є іменем функції чи класу, що визначає компонент. Можливо, ви захочете встановити його явно, якщо вам з метою налагодження потрібно відобразити інше ім’я чи коли ви створюєте компонент вищого порядку, перегляньте <a href=\"/docs/higher-order-components.html#convention-wrap-the-display-name-for-easy-debugging\">Обгортання відображуваного імені для легкого налагоджування</a>, щоб дізнатися більше.</p>\n<hr>\n<h2 id=\"instance-properties-1\"><a href=\"#instance-properties-1\" 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=\"props\"><a href=\"#props\" 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\">props</code> </h3>\n<p><code class=\"gatsby-code-text\">this.props</code> містить пропси, що були визначені в момент виклику компонента. Перегляньте <a href=\"/docs/components-and-props.html\">Компоненти і пропси</a> для ознайомлення з пропсами.</p>\n<p>Зокрема, <code class=\"gatsby-code-text\">this.props.children</code> — це спеціальний проп, зазвичай визначений дочірніми тегами в JSX виразі, а не в самому тегові.</p>\n<h3 id=\"state\"><a href=\"#state\" 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\">state</code> </h3>\n<p>Стан містить дані, конкретні для цього компонента і які можуть змінюватися з часом. Стан визначається користувачем і має бути простим JavaScript-об’єктом.</p>\n<p>Якщо певне значення не використовується для рендерингу чи потоку даних (наприклад, ідентифікатор таймера), вам не потрібно вставляти його в стан. Такі значення можуть бути визначені як поля екземпляру компонента.</p>\n<p>Перегляньте <a href=\"/docs/state-and-lifecycle.html\">Стан і життєвий цикл</a>, щоб дізнатися більше про стан.</p>\n<p>Ніколи напряму не змінюйте <code class=\"gatsby-code-text\">this.state</code>, так як подальший виклик <code class=\"gatsby-code-text\">setState()</code> може перезаписати ваші зміни. Поводьтеся з <code class=\"gatsby-code-text\">this.state</code> так, ніби він є незмінним.</p>","frontmatter":{"title":"React.Component","next":null,"prev":null},"fields":{"path":"content/docs/reference-react-component.md","slug":"docs/react-component.html"}}},"pageContext":{"slug":"docs/react-component.html"}},"staticQueryHashes":[]}