{"componentChunkName":"component---src-templates-docs-js","path":"/docs/react-component.html","result":{"data":{"markdownRemark":{"html":"<div class=\"scary\">\n<blockquote>\n<p>These docs are old and won’t be updated. Go to <a href=\"https://react.dev/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">react.dev</a> for the new React docs.</p>\n<p>These new documentation pages teach modern React:</p>\n<ul>\n<li><a href=\"https://react.dev/reference/react/Component\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">React.Component</code></a></li>\n</ul>\n</blockquote>\n</div>\n<p>Ta strona zawiera szegółowe odniesienie do definicji klasy reactowego komponentu. Zakłada ona, że znasz fundamentalne zagadnienia Reacta, takie jak <a href=\"/docs/components-and-props.html\">komponenty i właściwości</a>, i <a href=\"/docs/state-and-lifecycle.html\">stan i cykl życia</a>. Jeśli nie, zapoznaj się najpierw z nimi.</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>Ogólne informacje </h2>\n<p>React pozwala na zdefiniowanie komponentów jako klasy lub funkcje. Komponenty zdefiniowane jako klasy obecnie zapewniają więcej funkcjonalności, które szczegółowo opiszemy na tej stronie. Aby komponent mógł być zdefiniowany jako klasa, musi on dziedziczyć po klasie <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\">Cześć, </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>Jedyna metoda, która <em>musi</em> być zdefiniowana w klasie dziedziczącej po <code class=\"gatsby-code-text\">React.Component</code> nazywa się <a href=\"#render\"><code class=\"gatsby-code-text\">render()</code></a>. Wszystkie inne metody opisane na tej stronie są opcjonalne.</p>\n<p><strong>Stanowczo odradadzamy tworzenie własnych klas bazowych komponentów.</strong> W Reactowych komponentach <a href=\"/docs/composition-vs-inheritance.html\">wielokrotne użycie kodu jest osiągane przede wszystkim przez kompozycję, a nie dziedziczenie</a>.</p>\n<blockquote>\n<p>Uwaga:</p>\n<p>React nie zmusza cię do stosowania składni klasy ze standardu ES6. Jeśli wolisz jej uniknąć, możesz zamiast niej użyć modułu <code class=\"gatsby-code-text\">create-react-class</code> lub podobnej niestandardowej abstrakcji. Aby dowiedzieć się więcej, zobacz rozdział <a href=\"/docs/react-without-es6.html\">React bez 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>Cykl życia komponentu </h3>\n<p>Każdy komponent ma kilka “metod cyklu życia”, które możesz nadpisać, aby uruchomić kod w szczególnych momentach programu. <strong>Możesz użyć <a href=\"https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tego diagramu cyklu życia</a> jako ściągawki.</strong> Na liście poniżej, często używane metody cyklu życia zostały <strong>pogrubione</strong>. Reszta z nich istnieje dla stosunkowo rzadkich przypadków użycia.</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>Montowanie </h4>\n<p>Podczas, gdy instancja komponentu zostaje stworzona i włożona do drzewa DOM, w podanej kolejności wywołwane są poniższe metody:</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>Uwaga:</p>\n<p>Ta metoda jest uznawana za przestarzałą (ang. <em>legacy</em>) i powinno się <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">jej unikać</a> w nowym kodzie:</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>Aktualizacja </h4>\n<p>Aktualizacja może być spowodowana zmianami we właściwościach lub stanie komponentu. Kiedy komponent zostaje ponownie wyrenderowany, w podanej kolejności wywołane zostają poniższe metody:</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>Uwaga:</p>\n<p>Te metody są uznawane za przestarzałe i powinno się <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">ich unikać</a> w nowym kodzie:</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>Odmontowywanie </h4>\n<p>Kiedy komponent zostaje usunięty z drzewa DOM, wywołana zostaje poniższa metoda:</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>Obsługa wyjątków </h4>\n<p>Poniższe metody zostają wywołane w razie wystąpienia wyjątku podczas renderowania, w metodzie cyklu życia, lub w konstruktorze dowolnych komponentów potomnych.</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>Inne API </h3>\n<p>Każdy komponent zapewnia też kilka innych 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>Właściwości klasy </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>Właściwości instancji </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>Dokumentacja </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>Powszechnie używane metody cyklu życia </h3>\n<p>Metody opisane w tym rozdziale pokrywają zdecydowaną większość przypadków użycia, na które natkniesz się tworząc reactowe komponenty. <strong>Dla wizualnego odniesienia, zobacz <a href=\"https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ten diagram cyklu życia</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>Metoda <code class=\"gatsby-code-text\">render()</code> jest jedyną metodą wymaganą w komponencie klasowym.</p>\n<p>Wywołana, powinna sprawdzić <code class=\"gatsby-code-text\">this.props</code> i <code class=\"gatsby-code-text\">this.state</code> oraz zwrócić jeden z poniższych typów:</p>\n<ul>\n<li><strong>Reactowe elementy.</strong> Zwykle tworzone poprzez <a href=\"/docs/introducing-jsx.html\">JSX</a>. Na przykład, <code class=\"gatsby-code-text\">&lt;div /></code> i <code class=\"gatsby-code-text\">&lt;MyComponent /></code> są reactowymi elementami, które instruują Reacta, aby, odpowiednio, wyrenderował węzeł drzewa DOM, lub inny zdefiniowany przez użytkownika komponent.</li>\n<li><strong>Tablice i fragmenty.</strong> Pozwalają na zwrócenie wielu elementów z metody render. Po więcej szczegółów odwiedź dokumentację <a href=\"/docs/fragments.html\">fragmentów</a>.</li>\n<li><strong>Portale</strong>. Pozwalają na wyrenderowanie elementów potomnych w innym poddrzewie DOM. Po więcej szczegółów odwiedź dokumentację <a href=\"/docs/portals.html\">portali</a>.</li>\n<li><strong>Łańcuchy znaków i liczby.</strong> Zostają wyrenderowane jako węzły tekstowe w drzewie DOM.</li>\n<li><strong>Typ logiczny lub <code class=\"gatsby-code-text\">null</code></strong>. Nie renderuje nic. (Istnieje głównie, aby wspierać wzorzec <code class=\"gatsby-code-text\">return test &amp;&amp; &lt;Child /></code>, gdzie <code class=\"gatsby-code-text\">test</code> jest wartością logiczną.)</li>\n</ul>\n<p>Funkcja <code class=\"gatsby-code-text\">render()</code> powinna być czysta, to znaczy, że nie modyfikuje stanu komponentu, zwraca ten sam wynik przy każdym wywołaniu, i nie wchodzi w bezpośrednią interakcję z przeglądarką.</p>\n<p>Jeśli potrzebujesz wejść w interakcję z przeglądarką, zamiast tego wykonaj swoje instrukcje w <code class=\"gatsby-code-text\">componentDidMount()</code> lub innych metodach cyklu życia. Utrzymywanie funkcji <code class=\"gatsby-code-text\">render()</code> w czystości sprawia, że łatwiej jest myśleć o komponentach.</p>\n<blockquote>\n<p>Uwaga</p>\n<p>Funkcja <code class=\"gatsby-code-text\">render()</code> nie zostanie wywołana, jeśli <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> zwróci <code class=\"gatsby-code-text\">false</code>.</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>Jeśli nie inicjalizujesz stanu i nie wiążesz (ang. <em>bind</em>) metod, nie ma potrzeby, abyś implementował konstruktor w swoim reactowym komponencie.</strong></p>\n<p>Konstruktor reactowego komponentu jest wywoływany przed jego zamontowaniem. Kiedy implementujesz konstruktor w klasie dziedziczącej po klasie <code class=\"gatsby-code-text\">React.Component</code>, powinieneś wywołać metodę <code class=\"gatsby-code-text\">super(props)</code> przed jakąkolwiek inną instrukcją. W innym wypadku, <code class=\"gatsby-code-text\">this.props</code> będzie miało  w konstruktorze wartość <code class=\"gatsby-code-text\">undefined</code>, co może prowadzić do błędów.</p>\n<p>Zazwyczaj, konstruktory są używane tylko w dwóch celach:</p>\n<ul>\n<li>Inicjalizacji <a href=\"/docs/state-and-lifecycle.html\">stanu lokalnego</a> przez przypisanie obiektu do <code class=\"gatsby-code-text\">this.state</code>.</li>\n<li>Związania <a href=\"/docs/handling-events.html\">metody obsługującej zdarzenia</a> z instancją komponentu.</li>\n</ul>\n<p><strong>Nie powinieneś wywoływać metody <code class=\"gatsby-code-text\">setState()</code></strong> w funkcji <code class=\"gatsby-code-text\">constructor()</code>. Zamiast tego, jeśli potrzebujesz użyć w komponencie stanu lokalnego, <strong>przydziel początkowy stan do <code class=\"gatsby-code-text\">this.state</code></strong> bezpośrednio w konstruktorze:</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\">// Nie wywołuj tutaj 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> <span class=\"token literal-property property\">counter</span><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>Konstruktor jest jedynym miejscem, w którym powinieneś przypisywać <code class=\"gatsby-code-text\">this.state</code> bezpośrednio. Natomiast we wszystkich innych metodach powinieneś używać <code class=\"gatsby-code-text\">this.setState()</code>.</p>\n<p>Unikaj wprowadzania efektów ubocznych lub subskrypcji w konstruktorze. Używaj zamiast tego <code class=\"gatsby-code-text\">componentDidMount()</code> dla tych przypadków użycia.</p>\n<blockquote>\n<p>Uwaga</p>\n<p><strong>Unikaj kopiowania właściwości do stanu! Jest to częsty błąd:</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\">// Nie rób tego!</span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">color</span><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>Problem w tym, że jest to jednocześnie niepotrzebne (zamiast tego możesz użyć  <code class=\"gatsby-code-text\">this.props.color</code> bezpośrednio), i jest przyczyną błędów (aktualizacje właściwości <code class=\"gatsby-code-text\">color</code> nie będą odzwierciedlane w stanie).</p>\n<p><strong>Używaj tego wzorca tylko jeśli chcesz celowo ignorować aktualizacje właściwości.</strong> W tym wypadku, bedzie miała sens zmiana nazwy właściwości na <code class=\"gatsby-code-text\">initialColor</code> (ang. <em>początkowy kolor</em>) lub <code class=\"gatsby-code-text\">defaultColor</code> (ang. <em>domyślny kolor</em>). Możesz wtedy zmusić komponent do “zresetowania” swojego wewnętrznego stanu przez <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">zmianę jego właściwości <code class=\"gatsby-code-text\">key</code></a> w razie potrzeby.</p>\n<p>Przeczytaj nasz <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">wpis na blogu na temat unikania stanu pochodnego</a>, aby dowiedzieć się co należy zrobić, jeśli wydaje ci się, że potrzebujesz stanu zależnego od właściwości.</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>Metoda <code class=\"gatsby-code-text\">componentDidMount()</code> jest wywołowana bezpośrednio po zamontowaniu komponentu (po jego włożeniu do drzewa). Inicjalizacja, która wymaga węzłów drzewa DOM powinna się tam znaleźć. Jeśli potrzebujesz załadować dane ze zdalnego zasobu, jest to dobre miejsce do wykonania zapytania sieciowego.</p>\n<p>Ta metoda jest dobrym miejscem na przygotowanie dowolnych subskrypcji. Jeśli to zrobisz, nie zapomnij ich zakończyć w metodzie <code class=\"gatsby-code-text\">componentWillUnmount()</code>.</p>\n<p><strong>Możesz wywołać metodę <code class=\"gatsby-code-text\">setState()</code> od razu</strong> w <code class=\"gatsby-code-text\">componentDidMount()</code>. Spowoduje to dodatkowe renderowanie, ale zostanie ono wykonane zanim przeglądarka zaktualizuje ekran. Jest to gwarancją, że pomimo, iż metoda <code class=\"gatsby-code-text\">render()</code> będzie w tym przypadku wywołana dwa razy, użytkownik nie zobaczy pośredniego stanu. Używaj tego wzorca uważnie, ponieważ często powoduje on problemy z wydajnością. W większości przypadków, powinieneś zamiast tego mieć możliwość przypisania stanu początkowego w konstruktorze. Może to być natomiast konieczne w przypadkach takich jak okna modalne i okienka podpowiedzi, kiedy przed wyrenderowaniem czegoś trzeba zmierzyć węzeł drzewa 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>Metoda <code class=\"gatsby-code-text\">componentDidUpdate()</code> jest wywoływana bezpośrednio po wystąpieniu aktualizacji. Nie jest ona wywoływana po początkowym wyrenderowaniu.</p>\n<p>Używaj tego jako okazji do operacji na drzewie DOM kiedy komponent został zaktualizowany. Jest to także dobre miejsce na wykonywanie zapytań sieciowych tak długo jak porównujesz obecne właściwości z poprzednimi (na przykład, zapytanie może być niepotrzebne jeśli właściwości się nie zmieniły).</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\">// Typowy sposób użycia (nie zapomnij porównać właściwości):</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>Możesz wywołać metodę <code class=\"gatsby-code-text\">setState()</code> od razu</strong> w <code class=\"gatsby-code-text\">componentDidUpdate()</code>, ale weź pod uwagę, że <strong>musi ona być owinięta instrukcją warunkową</strong> jak w przykładzie powyżej, albo spowodujesz nieskończoną pętlę. Spowodowałoby to również dodatkowe renderowanie które, pomimo że niedostrzegalne dla użytkownika, może negatywnie wpłynąć na wydajność komponentu. Jeśli próbujesz “odzwierciedlić” pewien stan z właściwością pochodzącą z góry, rozważ zamiast tego użycie tej właściwości bezpośrednio. Dowiedz się więcej o tym <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">dlaczego kopiowanie właściwości do stanu powoduje błędy</a>.</p>\n<p>Jeśli twój komponent ma zaimplementowaną metodę cyklu życia <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> (co jest rzadkie), wartość którą ona zwróci, będzie przekazana jako trzeci parametr (“zrzut” (ang.<em>snapshot</em>)) do metody <code class=\"gatsby-code-text\">componentDidUpdate()</code>. W innym wypadku ten parametr będzie miał wartość <code class=\"gatsby-code-text\">undefined</code>.</p>\n<blockquote>\n<p>Uwaga</p>\n<p>Metoda <code class=\"gatsby-code-text\">componentDidUpdate()</code> nie będzie wywołana jeśli <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> zwróci <code class=\"gatsby-code-text\">false</code>.</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>Metoda <code class=\"gatsby-code-text\">componentWillUnmount()</code> jest wywoływana zaraz przed odmontowaniem i zniszczeniem komponentu. Przeprowadź potrzebne czyszczenie w tej metodzie, takie jak unieważnienie liczników czasu, anulowanie zapytań sieciowych, lub czyszczenie subskrypcji, które były rozpoczęte w <code class=\"gatsby-code-text\">componentDidMount()</code>.</p>\n<p><strong>Nie powinieneś wywoływać metody <code class=\"gatsby-code-text\">setState()</code></strong> w <code class=\"gatsby-code-text\">componentWillUnmount()</code>, ponieważ ten komponent nie zostanie ponownie wyrenderowany. Kiedy instancja komponentu zostaje odmonotowana, nigdy nie będzie zamontowana ponownie.</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>Rzadko używane metody cyklu życia </h3>\n<p>Metody zawarte w tej sekcji odpowiadają rzadkim przypadkom użycia. Czasem są przydatne, ale większość twoich komponentów najprawdopodobniej nie będzie ich potrzebowała. <strong>Większość poniższych metod możesz zobaczyć na <a href=\"https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tym diagramie cyklu życia</a> po kliknięciu na checkbox “Pokaż rzadziej używane metody” u góry.</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>Używaj metody <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>, aby dać znać Reactowi, czy obecna zmiana stanu lub właściwości komponentu nie wpłynęła na jego wynik. Domyślnym zachowaniem, na którym powinieneś polegać w większości przypadków, jest ponowne renderowanie przy każdej zmianie stanu.</p>\n<p>Metoda <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> jest wywoływana przed renderowaniem, gdy otrzymywane są nowe właściwości lub stan. Domylnie wartość zwracana to <code class=\"gatsby-code-text\">true</code>. Ta metoda nie jest wywoływana przy początkowym renderowaniu lub kiedy została użyta metoda <code class=\"gatsby-code-text\">forceUpdate()</code>.</p>\n<p>Ta metoda istnieje tylko jako <strong><a href=\"/docs/optimizing-performance.html\">optymalizacja wydajności</a>.</strong> Nie polegaj na niej aby “zapobiegać” renderowaniu, co może prowadzić do błędów. Zamiast pisania <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> własnoręcznie, <strong>rozważ użycie wbudowanej klasy <a href=\"/docs/react-api.html#reactpurecomponent\"><code class=\"gatsby-code-text\">PureComponent</code></a></strong>. <code class=\"gatsby-code-text\">PureComponent</code> przeprowadza płytkie porównanie właściwości i stanu, i obniża szansę na pominięcie niezbędnej aktualizacji.</p>\n<p>Jeśli jesteś pewny, że chcesz ją napisać własnoręcznie, możesz porównać <code class=\"gatsby-code-text\">this.props</code> z <code class=\"gatsby-code-text\">nextProps</code> i <code class=\"gatsby-code-text\">this.state</code> z <code class=\"gatsby-code-text\">nextState</code> oraz zwrócić <code class=\"gatsby-code-text\">false</code>, aby powiadomić Reacta, że aktualizacja może zostać pominięta. Zauważ, że zwrócenie <code class=\"gatsby-code-text\">false</code> nie zapobiega ponownemu wyrenderowaniu komponentów potomnych, gdy <em>ich</em> stan się zmienia.</p>\n<p>Nie zalecamy wykonywania głębokich porównań lub używania <code class=\"gatsby-code-text\">JSON.stringify()</code> w metodzie <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>. Jest to bardzo nieefektywne i negatywnie odbije się na wydajności.</p>\n<p>Obecnie, jeśli <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> zwróci <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> i <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate()</code></a> nie zostana wywołane. W przyszłosci React może traktować <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> jako wskazówkę, a nie jako ścisłą dyrektywę, a zwrócenie <code class=\"gatsby-code-text\">false</code> może mimo wszytko skutkować ponownym wyrenderowaniem komponentu.</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>Metoda <code class=\"gatsby-code-text\">getDerivedStateFromProps</code> jest wywoływana zaraz przed wywołaniem metody render, zarówno przy początkowym montowaniu, jak i przy dalszych aktualizacjach. Powinna zwrócić obiekt, aby zaktualizować stan, lub zwrócić <code class=\"gatsby-code-text\">null</code>, aby nie aktualizować nic.</p>\n<p>Ta metoda istnieje dla <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#when-to-use-derived-state\">rzadkich przypadków użycia</a>, w których stan zależy od zmian właściwości w czasie. Na przykład, może okazać się przydatnym komponent <code class=\"gatsby-code-text\">&lt;Transition></code>, który porównuje swoje obecne komponenty potomne z poprzednimi, aby zdecydować, króre z nich mają pojawić się z animacją, a które zniknąć.</p>\n<p>Derywowanie stanu sprawia, że kod jest rozwlekły i trudno myśli się o komponentach.\n<a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">Upewnij się, że znasz prostsze alternatywy:</a></p>\n<ul>\n<li>Jeśli potrzebujesz <strong>spowodować efekt uboczny</strong> (na przykład pobranie danych, albo animację) w odpowiedzi na zmianę właściwości, zamiast tego użyj metody cyklu życia <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate</code></a>.</li>\n<li>Jeśli chcesz <strong>ponownie obliczyć pewne dane tylko, kiedy zmieni się właściwość</strong>, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#what-about-memoization\">zamiast tego użyj pomocniczych technik memoizacyjnych</a>.</li>\n<li>Jeśli chcesz <strong>“zresetować” stan przy zmianie właściwości</strong>, rozważ zamiast tego uczynienie komponentu <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-controlled-component\">całkowicie kontrolowanym</a> lub <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">całkowicie niekontrolowanym z właściwością <code class=\"gatsby-code-text\">key</code></a>.</li>\n</ul>\n<p>Ta metoda nie ma dostępu do instancji komponentu. Jeśli chcesz, możesz używać ponownie kod pomiędzy <code class=\"gatsby-code-text\">getDerivedStateFromProps()</code> innymi metodami klasy poprzez wyodrębnienie czystych funkcji właściwości i stanu komponentu poza definicję klasy.</p>\n<p>Zauważ, że metoda ta wywoływana jest przy <em>każdym</em> renderowaniu, bez względu na przyczynę. Jest to kontrastem dla metody <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps</code>, która zostaje wywołana tylko, kiedy komponent nadrzędny powoduje ponowne wyrenderowanie, a nie jako wynik lokalnego wywołania metody <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>Metoda <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> jest wywoływana zaraz przed tym, gdy ostatnio wyrenderowany wynik zostaje zatwierdzony do np. drzewa DOM. Pozwala to twojemu komponentowi na przejęcie pewnych informacji z drzewa DOM (np. pozycje scrolla) przed ich potencjalną zmianą. Każda wartość zwrócona przez metodę cyklu życia zostanie przekazana jako parametr do metody <code class=\"gatsby-code-text\">componentDidUpdate()</code>.</p>\n<p>Ten przypadek użycia nie jest powszechny, ale może wystąpić w interfejsach użytkownika takich jak wątki czatu, które potrzebują możliwości zarządzania pozycją scrolla w specjalny sposób.</p>\n<p>Powinna być zwrócona wartość snapshotu (lub <code class=\"gatsby-code-text\">null</code>).</p>\n<p>Dla przykładu:</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\">// Czy dodajemy nowe pozycje do listy?</span>\n    <span class=\"token comment\">// Przechowajmy pozycję scrolla, aby móc dostosować ją później.</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\">// Jeśli mamy snapshot, to znaczy, że właśnie dodaliśmy nowe pozycje.</span>\n    <span class=\"token comment\">// Dopasujmy scroll, aby te nowe pozycje nie wypchnęły starych z widoku.</span>\n    <span class=\"token comment\">// (snapshot jest tutaj wartością zwróconą z metody 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\">/* ...zawartość... */</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>W powyższych przykładach, ważne jest odczytanie własności <code class=\"gatsby-code-text\">scrollHeight</code> w metodzie <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate</code>, ponieważ mogą wystąpić opóźnienia pomiędzy metodami cyklu życia w fazie “render” (takimi jak <code class=\"gatsby-code-text\">render</code>), a metodami fazy “commit” (takimi jak <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate</code> i <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>Granice błędu </h3>\n<p><a href=\"/docs/error-boundaries.html\">Granice błędów</a> to reactowe komponenty, które wychwytują javascriptowe wyjątki w dowolnych miejscach swojego drzewa komponentów potomnych, zapisują te wyjątki, i pokazują awaryjny interfejs użytkownika zamiast drzewa komponentów, które rzuciło tym wyjątkiem. Granice błędów wychwytują wyjątki podczas renderowania, w metodach cyklu życia, i w konstruktorach całego drzewa potomnego.</p>\n<p>Komponent klasowy staje się granicą błędu, jeśli ma zdefiniowaną jedną z (lub obie) metod cyklu życia <code class=\"gatsby-code-text\">static getDerivedStateFromError()</code> lub <code class=\"gatsby-code-text\">componentDidCatch()</code>. Aktualizacja stanu z tych metod pozwala na wychwycenie nieobsłużonego javascriptowego wyjątku w drzewie komponentów potomnych i pokazać rezerwowy interfejs użytkownika.</p>\n<p>Używaj granic błędów tylko do rekonwalescencji po nieoczekiwanych wyjątkach; <strong>nie próbuj używać ich do kontrolowania przebiegu programu.</strong></p>\n<p>Po więcej szczegółów, odwiedź <a href=\"/blog/2017/07/26/error-handling-in-react-16.html\"><em>Obsługa wyjątków w Reakcie 16</em></a>.</p>\n<blockquote>\n<p>Uwaga</p>\n<p>Granice błędów wychwytują tylko wyjątki w komponentach z drzewa <strong>pod</strong> nimi. Granica błędów nie może wychwycić wyjątku, który wystąpił w niej samej.</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>Ta metoda cyklu życia jest wywoływana po wyrzuceniu wyjątku przez komponent potomny.\nWyrzucony wyjątek zostaje do niej przekazany jako argument, jej wynikiem powinna być wartość, która pozwoli na zaktualizowanie stanu.</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> <span class=\"token literal-property property\">hasError</span><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\">// Aktualizacja stanu, aby kolejne wyrenderowanie pokazało awaryjny interfejs użytkownika.</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">hasError</span><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\">// Możesz wyrenderować dowolny awaryjny interfejs użytkownika</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\">Something went wrong.</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>Uwaga</p>\n<p>Metoda <code class=\"gatsby-code-text\">getDerivedStateFromError()</code> jest wywoływana podczas fazy “render”, więc nie są w niej dozwolone skutki uboczne.\nZamiast tego, dla tych przypadków użycia użyj metody <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>Ta metoda cyklu życia jest wywoływana po wyrzuceniu wyjątku przez komponent potomny.\nOtrzymuje on dwa argumenty:</p>\n<ol>\n<li><code class=\"gatsby-code-text\">error</code> - Wyjątek, który został wyrzucony.</li>\n<li><code class=\"gatsby-code-text\">info</code> - Obiekt z kluczem <code class=\"gatsby-code-text\">componentStack</code> zawierający <a href=\"/docs/error-boundaries.html#component-stack-traces\">informację o tym, który komponent wyrzucił ten wyjątek</a>.</li>\n</ol>\n<p>Metoda <code class=\"gatsby-code-text\">componentDidCatch()</code> jest wywoływana w fazie “commit”, więc dozwolone są w niej skutki uboczne.\nPowinna być używana do czynności takich jak zapisywanie błędów:</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> <span class=\"token literal-property property\">hasError</span><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\">// Aktualizacja stanu, aby kolejne wyrenderowanie pokazało awaryjny interfejs użytkownika.</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">hasError</span><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\">// Przykładowy \"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\">// Możesz wyrenderować dowolny awaryjny interfejs użytkownika</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\">Coś poszło nie tak.</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<p>Zbudowana paczka deweloperska będzie nieco różnić się od produkcyjnej pod względem sposobu obsługiwania błędów przez <code class=\"gatsby-code-text\">componentDidCatch()</code>.</p>\n<p>W środowisku deweloperskim błędy wędrują aż do <code class=\"gatsby-code-text\">window</code>, co oznacza, że wszelkie procedury zarejestrowane za pomocą <code class=\"gatsby-code-text\">window.onerror</code> lub <code class=\"gatsby-code-text\">window.addEventListener('error', callback)</code> również przechwycą te błędy, które złapie <code class=\"gatsby-code-text\">componentDidCatch()</code>.</p>\n<p>Inaczej jest na produkcji, gdzie błędy nie wędrują aż na samą górę. Oznacza to, że nadrzędne granice błędów otrzymają błąd tylko wtedy, gdy ich potomkowie wcześniej ich nie przechwycą za pomocą <code class=\"gatsby-code-text\">componentDidCatch()</code>.</p>\n<blockquote>\n<p>Uwaga</p>\n<p>W razie wyjątku, możesz wyrenderować awaryjny interfejs użytkownika za pomocą metody <code class=\"gatsby-code-text\">componentDidCatch()</code> poprzez wywołanie metody <code class=\"gatsby-code-text\">setState</code>, ale możliwość ta będzie przestarzała w przyszłych wersjach.\nDo obsługi renderowania awaryjnego używaj zamiast tego metody <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>Przestarzałe metody cyklu życia </h3>\n<p>Poniższe metody cyklu życia są oznaczone jako “przestarzałe”. Wciąż działają, zalecamy jednak nie używać ich w nowym kodzie. Możesz dowiedzieć się więcej o migracji od przestarzałych metod cyklu życia <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">w tym wpisie na blogu</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>Uwaga</p>\n<p>Ta metoda cyklu życia była wcześniej nazwana <code class=\"gatsby-code-text\">componentWillMount</code>. Ta nazwa będzie działać do wersji 17. Użyj <a href=\"https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">codemoda <code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code></a>, aby automatycznie zaktualizować swoje komponenty.</p>\n</blockquote>\n<p>Metoda <code class=\"gatsby-code-text\">UNSAFE_componentWillMount()</code> jest wywoływana zaraz przed nastąpieniem montowania. Jest wywoływana przed <code class=\"gatsby-code-text\">render()</code>, zatem synchroniczne wywoływanie <code class=\"gatsby-code-text\">setState()</code> w tej metodzie nie spowoduje dodatkowego renderowania. Generalnie, zamiast tego do inicjalizacji stanu zalecamy używania konstruktora.</p>\n<p>Unikaj wprowadzania skutków ubocznych lub inicjalizowania subskrypcji w tej metodzie. Dla tych przypadków użycia, używaj zamiast tego metody <code class=\"gatsby-code-text\">componentDidMount()</code>.</p>\n<p>Jest to jedyna metoda cyklu życia wywoływana przy renderowaniu na serwerze.</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>Uwaga</p>\n<p>Ta metoda cyklu życia była wcześniej nazwana <code class=\"gatsby-code-text\">componentWillReceiveProps</code>. Ta nazwa będzie działać do wersji 17. Użyj <a href=\"https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">codemoda <code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code></a>, aby automatycznie zaktualizować swoje komponenty.</p>\n</blockquote>\n<blockquote>\n<p>Uwaga:</p>\n<p>Używanie tej metody cyklu życia często prowadzi do błędów i niespójności</p>\n<ul>\n<li>Jeśli potrzebujesz <strong>wykonać efekt uboczny</strong> (na przykład, pobieranie danych lub animację) w odpowiedzi na zmianę właściwości, zamiast tego użyj metody cyklu życia <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate</code></a>.</li>\n<li>Jeśli używałeś <code class=\"gatsby-code-text\">componentWillReceiveProps</code> do <strong>ponownego obliczania pewnych danych tylko w przypadku zmiany właściwości</strong>, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#what-about-memoization\">zamiast tego użyj pomocniczych technik memoizacyjnych</a>.</li>\n<li>Jeśli używałeś <code class=\"gatsby-code-text\">componentWillReceiveProps</code> do <strong>“resetowania” stanu w przypadku zmiany właściwości</strong>, zamiast tego rozważ uczynienie komponentu <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-controlled-component\">całkowicie kontrolowanym</a> lub <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">całkowicie niekontrolowanym z właściwością <code class=\"gatsby-code-text\">key</code></a>.</li>\n</ul>\n<p>Dla innych przypadków użycia, <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">śledź rekomendacje w tym wpisie na blogu na temat stanu pochodnego</a>.</p>\n</blockquote>\n<p>Metoda <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> jest wywoływana przed tym, jak zamontowany komponent otrzymuje nowe właściwości. Jeśli potrzebujesz zaktualizować stan w odpowiedzi na zmiany właściwości (na przykład, zresetować go), możesz porównać <code class=\"gatsby-code-text\">this.props</code> i <code class=\"gatsby-code-text\">nextProps</code> i wykonać przejście stanu w tej metodzie za pomocą <code class=\"gatsby-code-text\">this.setState()</code>.</p>\n<p>Zauważ, że jeśli komponent nadrzędny powoduje ponowne wyrenderowanie twojego komponentu, ta metoda będzie wywołana nawet jeśli właściwości nie uległy zmianie. Jeśli chcesz tylko obsłużyć zmiany, upewnij się, że porównujesz poprzednie i obecne wartości.</p>\n<p>React nie wywołuje metody <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> z początkowymi właściwościami podczas <a href=\"#mounting\">montowania</a>. Wywołuje ją tylko, kiedy właściwości któregoś z komponentów mogą zostać zaktualizowane. Wywołanie metody <code class=\"gatsby-code-text\">this.setState()</code> przeważnie nie powoduje wywołania <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>Uwaga</p>\n<p>Ta metoda cyklu życia była wcześniej nazwana <code class=\"gatsby-code-text\">componentWillUpdate</code>.  Ta nazwa będzie działać do wersji 17. Użyj <a href=\"https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">codemoda <code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code></a>, aby automatycznie zaktualizować swoje komponenty.</p>\n</blockquote>\n<p>Metoda <code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> jest wywoływana zaraz przed renderowaniem, kiedy komponent uzyskuje nowe właściwości lub stan. Używaj tego jako okazji do przygotowania przed nastąpieniem aktualizacji. Ta metoda nie jest wywoływana przy początkowym renderowaniu.</p>\n<p>Zauważ, że nie możesz tutaj wywołać <code class=\"gatsby-code-text\">this.setState()</code>; nie powinieneś też robić niczego innego (np. wysyłania Reduxowych akcji), co spowodowałoby aktualizację reactowego komponentu przed powrotem z metody <code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code>.</p>\n<p>Metoda ta, zazwyczaj może być zastąpiona metodą <code class=\"gatsby-code-text\">componentDidUpdate()</code>. Jeśli zczytywałeś w tej metodzie informacje z drzewa DOM (np. żeby zapisać pozycje scrolla), możesz przenieść tą logikę do getSnapshotBeforeUpdate().</p>\n<blockquote>\n<p>Uwaga</p>\n<p>Metoda <code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> nie będzie wywołana jeśli <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> zwróci <code class=\"gatsby-code-text\">false</code>.</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>Inne API </h2>\n<p>W przeciwieństwie do metod cyklu życia powyżej (które wywołuje dla ciebie React), metody poniżej możesz wywołać <em>ty</em> ze swoich komponentów.</p>\n<p>Są tylko dwie takie metody: <code class=\"gatsby-code-text\">setState()</code> i <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> ustawia w kolejce zmiany stanu komponentu i daje znać Reactowi, że komponent i jego komponenty potomne powinny zostać ponownie wyrenderowane ze zaktualizowanym stanem. Jest to podstawowa metoda używana do aktualizacji interfejsu użytkownika w odpowiedzi na procedury obsługi zdarzeń i odpowiedzi z serwera.</p>\n<p>Myśl o metodzie <code class=\"gatsby-code-text\">setState()</code> bardziej jako o <em>prośbie</em> niż o natychmiastowym poleceniu aktualizacji komponentu. Dla lepszej postrzeganej wydajności, React może ją opóźnić, a potem zaktualizować kilka komponentów za jednym zamachem. W rzadkich sytuacjach, kiedy potrzebujesz wymusić synchroniczną aktualizację DOM, możesz opakować ją w <a href=\"/docs/react-dom.html#flushsync\"><code class=\"gatsby-code-text\">flushSync</code></a>. Ale pamiętaj, że może na tym ucierpieć wydajność aplikacji.</p>\n<p>Metoda <code class=\"gatsby-code-text\">setState()</code> nie zawsze od razu aktualizuje komponent. Może ona złączyć lub odłożyć aktualizację na później. Sprawia to, że odczytywanie <code class=\"gatsby-code-text\">this.state</code> zaraz po wywołaniu <code class=\"gatsby-code-text\">setState()</code> jest potencjalną pułapką. Zamiast tego, użyj metody <code class=\"gatsby-code-text\">componentDidUpdate</code> lub funkcji zwrotnej (ang. <em>callback</em>) <code class=\"gatsby-code-text\">setState</code> (<code class=\"gatsby-code-text\">setState(updater, callback)</code>), które są wywoływane po zastosowaniu aktualizacji. Jeśli potrzebujesz zmienić stan w oparciu o poprzedni stan, zapoznaj się z poniższym argumentem <code class=\"gatsby-code-text\">updater</code>.</p>\n<p><code class=\"gatsby-code-text\">setState()</code> zawsze powoduje ponowne renderowanie komponentu, chyba że <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> zwróci <code class=\"gatsby-code-text\">false</code>. Jeśli przechowujemy mutowalne obiekty, a logiki decydującej o potrzebie ponownego renderowania nie da się zawrzeć w metodzie <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>, możemy uniknąć zbędnego renderowania wywołując <code class=\"gatsby-code-text\">setState()</code> tylko wtedy, gdy nowy stan różni się od poprzedniego.</p>\n<p>Pierwszym argumentem jest funkcja <code class=\"gatsby-code-text\">updater</code> posiadająca poniższą sygnaturę:</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> jest referencją stanu komponentu w momencie, w którym zmiana zostaje zastosowana. Nie powinien on być bezpośrednio zmieniany. Zamiast tego, zmiany powinny być reprezentowane poprzez zbudowanie nowego obiektu na podstawie <code class=\"gatsby-code-text\">state</code> and <code class=\"gatsby-code-text\">props</code>. Na przykład załóżmy, że chcemy powiększyć pewną wartość w stanie o <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><span class=\"token literal-property property\">counter</span><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>Zarówno <code class=\"gatsby-code-text\">state</code>, jak i <code class=\"gatsby-code-text\">props</code> otrzymywane przez funkcję aktualizującą są aktualne. Wynik aktualizatora zostaje płytko scalony ze stanem.</p>\n<p>Drugi parametrem metody <code class=\"gatsby-code-text\">setState()</code> jest opcjonalna funkcja zwrotna, która zostanie wywołana kiedy <code class=\"gatsby-code-text\">setState</code> ukończy swój przebieg i komponent zostanie ponownie wyrenderowany. Ogólnie rzecz biorąc, do tego typu logiki zalecamy zamiast tego używać metody <code class=\"gatsby-code-text\">componentDidUpdate()</code>.</p>\n<p>Opcjonalnie, jako pierwszy argument do metody <code class=\"gatsby-code-text\">setState()</code> zamiast funkcji możesz przekazać obiekt:</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>Powoduje to przeprowadzenie płytkiego scalenia argumentu <code class=\"gatsby-code-text\">stateChange</code> do nowego stanu, np., w celu dostosowania ilości przedmiotów w koszyku:</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 literal-property property\">quantity</span><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>Ta forma metody <code class=\"gatsby-code-text\">setState()</code> także jest asynchroniczna, a wywołanie jej wiele razy podczas jednego cyklu może spowodować ich złączenie. Na przykład, jeśli spróbujesz zwiększyć ilość przedmiotów więcej niż jeden raz w tym samym cyklu, rezultatem tego będzie ekwiwalent:</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><span class=\"token literal-property property\">quantity</span><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 literal-property property\">quantity</span><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>Następujące wywołania nadpiszą wartości z poprzednich w tym samym cyklu, więc ilość będzie zwiększona tylko raz. Jeśli kolejny stan zależy od poprzedniego, zamiast tego zalecamy używania formy z funkcją aktualizującą:</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><span class=\"token literal-property property\">quantity</span><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>Po więcej szczegółów, odwiedź:</p>\n<ul>\n<li><a href=\"/docs/state-and-lifecycle.html\">Przewodnik po stanie i cyklu życia</a></li>\n<li><a href=\"https://stackoverflow.com/a/48610973/458193\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Dogłębnie: Kiedy i dlaczego wywołania <code class=\"gatsby-code-text\">setState()</code> są łączone?</a></li>\n<li><a href=\"https://github.com/facebook/react/issues/11527#issuecomment-360199710\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Dogłębnie: Dlaczego this.state nie jest aktualizowany od razu?</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>Domyślnie, kiedy zmienia się stan lub właściwości twojego komponentu, zrenderuje się on ponownie. Jeśli twoja metoda <code class=\"gatsby-code-text\">render()</code> polega na innych danych, możesz powiadomić Reacta, że komponent potrzebuje ponownego wyrenderowania, poprzez wywołanie metody <code class=\"gatsby-code-text\">forceUpdate()</code>.</p>\n<p>Wywołanie <code class=\"gatsby-code-text\">forceUpdate()</code> spowoduje, że na komponencie zostanie wywołana metoda <code class=\"gatsby-code-text\">render()</code>, z pominięciem metody <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>. Spowoduje to wywołanie normalnych metod cyklu życia komponentów potomnych, włączając w to metodę <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> każdego z nich. React wciąż zaktualizuje drzewo DOM tylko w wypadku zmiany znaczników.</p>\n<p>Przeważnie powinieneś unikać jakichkolwiek form użycia <code class=\"gatsby-code-text\">forceUpdate()</code> i odczytywać dane jedynie z <code class=\"gatsby-code-text\">this.props</code> i <code class=\"gatsby-code-text\">this.state</code> w metodzie <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>Właściwości Klasy </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> może być zdefiniowana jako własność na samej klasie komponentu, aby ustawić domyślne właściwości dla tej klasy. Jest ona używana dla właściwości równych <code class=\"gatsby-code-text\">undefined</code>, ale nie <code class=\"gatsby-code-text\">null</code>. Dla przykładu:</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  <span class=\"token literal-property property\">color</span><span class=\"token operator\">:</span> <span class=\"token string\">'blue'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Jeśli <code class=\"gatsby-code-text\">props.color</code> nie jest podany, zostanie domyślnie ustawiony na <code class=\"gatsby-code-text\">'blue'</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 zostanie ustawiony na blue</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>Jeśli <code class=\"gatsby-code-text\">props.color</code> zostanie ustawiony jako <code class=\"gatsby-code-text\">null</code>, pozostanie nim:</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 pozostanie równy 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>Napis <code class=\"gatsby-code-text\">displayName</code> jest używany w komunikatach debugowania. Przeważnie, nie musisz jawnie go definiować, ponieważ jest on wywnioskowany z nazwy funkcji lub klasy, w której zdefiniowany jest ten komponent. Możesz chcieć jawnie go zdefiniować, jeśli chcesz wyświetlić inną nazwę komponentu przy debugowaniu lub kiedy stworzysz komponent wyższego rzędu, po szczegóły odwiedź <a href=\"/docs/higher-order-components.html#convention-wrap-the-display-name-for-easy-debugging\">Owiń nazwę wyświetlenia dla łatwego debugowania</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>Właściwości instancji </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> zawiera właściwości, które zostały zdefiniowane przez przywołującego tego komponentu. Po wprowadzenie do właściwości, odwiedź <a href=\"/docs/components-and-props.html\">Komponenty i właściwości</a>.</p>\n<p>W szczególności, <code class=\"gatsby-code-text\">this.props.children</code> jest specjalną właściwością, zazwyczaj zdefiniowaną poprzez potomne tagi w wyrażeniu JSX, a nie w samym tagu instancji.</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>Stan zawiera dane specyficzne dla tego komponentu, które mogą zmieniać się w czasie. Stan jest definiowany przez użytkownika i powinien być zwykłym javascriptowym obiektem.</p>\n<p>Jeśli jakaś wartość nie jest używana do renderowania ani przepływu danych (na przykład, ID licznika czasu), nie musisz umieszczać jej w stanie. Wartości tego typu mogą być zdefiniowane jako pola składowe instancji komponentu.</p>\n<p>Po informacje na temat stanu, odwiedź <a href=\"/docs/state-and-lifecycle.html\">Stan i cykl życia</a>.</p>\n<p>Nigdy nie zmieniaj <code class=\"gatsby-code-text\">this.state</code> bezpośrednio, gdyż późniejsze wywołanie <code class=\"gatsby-code-text\">setState()</code> może zastąpić wykonaną przez ciebie zmianę. Traktuj <code class=\"gatsby-code-text\">this.state</code> jako niezmienny.</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":[]}