{"componentChunkName":"component---src-templates-docs-js","path":"/docs/react-component.html","result":{"data":{"markdownRemark":{"html":"<p>این صفحه شامل جزئیات دقیق منابع API ری‌اکت برای تعریف کامپوننت از جنس کلاس‌ است. فرض شده‌است که شما با مفاهیم بنادین ری‌اکت مانند <a href=\"/docs/components-and-props.html\">کامپوننت‌ها و Props</a> و <a href=\"/docs/state-and-lifecycle.html\">State و چرخه حیات</a> آشنا هستید. در غیر‌این‌صورت ابتدا آن‌ها را مطالعه نمایید.</p>\n<h2 id=\"overview\"><a href=\"#overview\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>بررسی اجمالی </h2>\n<p>ری‌اکت به شما اجازه می‌دهد تا کامپوننت‌ها را به عنوان کلاس یا تابع تعریف کنید. کامپوننت‌هایی که به عنوان کلاس تعریف می‌شوند در حال حاضر امکانات بیشتری را فراهم می‌کنند که در این صفحه با جزئیات کامل تشریح شده‌است. برای تعریف یک کلاس کامپوننت ری‌اکت شما به گسترش <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\">Hello, </span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>تنها متدی که شما <em>باید</em> در یک زیرکلاس <code class=\"gatsby-code-text\">React.Component</code> تعریف کنید، <a href=\"#render\"><code class=\"gatsby-code-text\">render()</code></a> نام دارد. تمامی متدهای دیگر تشریح شده در این صفحه، اختیاری هستند.</p>\n<p><strong>ما به شدت مخالف این هستیم که شما برای خودتان کلاس‌های کامپونت مادر ایجاد کنید</strong>. در کاپوننت‌های ری‌اکت، <a href=\"/docs/composition-vs-inheritance.html\">استفاده مجدد از کد بیشتر از طریق ترکیب قابل دستیابی است تا وراثت</a>.</p>\n<blockquote>\n<p>نکته:</p>\n<p>ری‌اکت شما را مجبور به استفاده از قوانین کلاس‌ها در ES6 نمی‌کند. اگر ترجیح می‌دهید که از این قوانین استفاده کنید، می‌توانید از ماژول <code class=\"gatsby-code-text\">create-react-class</code> یا تجریدهای شخصی‌سازی شده مشابه استفاده نمایید. برای اطلاعات بیشتر به <a href=\"/docs/react-without-es6.html\">Using React without ES6</a> نگاهی بیاندازید.</p>\n</blockquote>\n<h3 id=\"the-component-lifecycle\"><a href=\"#the-component-lifecycle\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>چرخه‌ی حیات کامپوننت </h3>\n<p>هر کامپوننت چندین “متد چرخه‌ی حیات” دارد که شما می‌توانید بازنویسی کنید تا در زمان‌های خاص فرآیند اجرا، کد شما اجرا شود. <strong>شما می‌توانید از <a href=\"https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">این دیاگرام چرخه‌حیات</a> به عنوان راهنما استفاده کنید.</strong> در لیست زیر، متدهای چرخه‌ی حیات رایج به صورت <strong>برجسته</strong> نشانه‌گذاری شده‌اند. باقی آن‌ها برای موارد نادر استفاده وجود دارند.</p>\n<h4 id=\"mounting\"><a href=\"#mounting\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>اجرای اولیه (Mounting) </h4>\n<p>این متدها به ترتیب زیر هنگام ایجاد یک نمونه از کامپوننت و درج آن در DOM صدا زده می‌شوند:</p>\n<ul>\n<li><a href=\"#constructor\"><strong><code class=\"gatsby-code-text\">constructor()</code></strong></a></li>\n<li><a href=\"#static-getderivedstatefromprops\"><code class=\"gatsby-code-text\">static getDerivedStateFromProps()</code></a></li>\n<li><a href=\"#render\"><strong><code class=\"gatsby-code-text\">render()</code></strong></a></li>\n<li><a href=\"#componentdidmount\"><strong><code class=\"gatsby-code-text\">componentDidMount()</code></strong></a></li>\n</ul>\n<blockquote>\n<p>نکته:</p>\n<p>این متدها موروثی در نظر گرفته می‌شوند و شما باید از آن‌ها در کد جدید <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">خودداری کنید</a>:</p>\n<ul>\n<li><a href=\"#unsafe_componentwillmount\"><code class=\"gatsby-code-text\">UNSAFE_componentWillMount()</code></a></li>\n</ul>\n</blockquote>\n<h4 id=\"updating\"><a href=\"#updating\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>به‌روز رسانی </h4>\n<p>یک به‌روز رسانی می‌تواند به وسیله تغییر دادن state یا props رخ دهد. این متدها هنگامی که یک کامپوننت دوباره رندر می‌شود به ترتیب زیر صدا زده می‌شوند:</p>\n<ul>\n<li><a href=\"#static-getderivedstatefromprops\"><code class=\"gatsby-code-text\">static getDerivedStateFromProps()</code></a></li>\n<li><a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a></li>\n<li><a href=\"#render\"><strong><code class=\"gatsby-code-text\">render()</code></strong></a></li>\n<li><a href=\"#getsnapshotbeforeupdate\"><code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code></a></li>\n<li><a href=\"#componentdidupdate\"><strong><code class=\"gatsby-code-text\">componentDidUpdate()</code></strong></a></li>\n</ul>\n<blockquote>\n<p>نکته:</p>\n<p>این متدها موروثی در نظر گرفته می‌شوند و شما باید از آن‌ها در کد جدید <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">خودداری کنید</a>:</p>\n<ul>\n<li><a href=\"#unsafe_componentwillupdate\"><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code></a></li>\n<li><a href=\"#unsafe_componentwillreceiveprops\"><code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code></a></li>\n</ul>\n</blockquote>\n<h4 id=\"unmounting\"><a href=\"#unmounting\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>نابود شدن (Unmounting) </h4>\n<p>این متدها هنگامی که یک کامپوننت از DOM پاک می‌شود صدا زده می‌شوند:</p>\n<ul>\n<li><a href=\"#componentwillunmount\"><strong><code class=\"gatsby-code-text\">componentWillUnmount()</code></strong></a></li>\n</ul>\n<h4 id=\"error-handling\"><a href=\"#error-handling\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>کنترل خطا </h4>\n<p>این متدها هنگام بروز خطا در زمان رندر شدن، در یکی از متدهای چرخه‌ی حیات و یا در سازنده هر کدام از کامپوننت‌های فرزند صدا زده می‌شوند:</p>\n<ul>\n<li><a href=\"#static-getderivedstatefromerror\"><code class=\"gatsby-code-text\">static getDerivedStateFromError()</code></a></li>\n<li><a href=\"#componentdidcatch\"><code class=\"gatsby-code-text\">componentDidCatch()</code></a></li>\n</ul>\n<h3 id=\"other-apis\"><a href=\"#other-apis\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>دیگر API‌ها </h3>\n<p>همچنین هر کامپوننت API های دیگری نیز فراهم می‌کند:</p>\n<ul>\n<li><a href=\"#setstate\"><code class=\"gatsby-code-text\">setState()</code></a></li>\n<li><a href=\"#forceupdate\"><code class=\"gatsby-code-text\">forceUpdate()</code></a></li>\n</ul>\n<h3 id=\"class-properties\"><a href=\"#class-properties\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ویژگی‌های کلاس </h3>\n<ul>\n<li><a href=\"#defaultprops\"><code class=\"gatsby-code-text\">defaultProps</code></a></li>\n<li><a href=\"#displayname\"><code class=\"gatsby-code-text\">displayName</code></a></li>\n</ul>\n<h3 id=\"instance-properties\"><a href=\"#instance-properties\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ویژگی‌های Instance </h3>\n<ul>\n<li><a href=\"#props\"><code class=\"gatsby-code-text\">props</code></a></li>\n<li><a href=\"#state\"><code class=\"gatsby-code-text\">state</code></a></li>\n</ul>\n<hr>\n<h2 id=\"reference\"><a href=\"#reference\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>مرجع </h2>\n<h3 id=\"commonly-used-lifecycle-methods\"><a href=\"#commonly-used-lifecycle-methods\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>متدهای چرخه‌ی حیات رایج </h3>\n<p>متدهای این بخش اکثریت قریب به اتفاق موارد کاربردی که شما هنگام ایجاد کامپوننت‌های ری‌اکت با آن‌ها مواجه می‌شوید را پوشش می‌دهد. <strong>برای یک مرجع بصری، <a href=\"https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">این دیاگرام چرخه‌ی حیات</a> را بررسی کند.</strong></p>\n<h3 id=\"render\"><a href=\"#render\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">render()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">render()</code> تنها متد ضروری در یک کلاس کامپوننت است.</p>\n<p>هنگام فراخوانی، باید <code class=\"gatsby-code-text\">this.props</code> و <code class=\"gatsby-code-text\">this.state</code> را بررسی کند و یکی از موارد زیر را بازگرداند:</p>\n<ul>\n<li><strong>المنت‌های ری‌اکت.</strong> معمولا با <a href=\"/docs/introducing-jsx.html\">JSX</a> ایجاد می‌شود. برای مثال، <code class=\"gatsby-code-text\">&lt;div /&gt;</code> و <code class=\"gatsby-code-text\">&lt;MyComponent /&gt;</code> المنت‌های ری‌اکت هستند که ری‌اکت را راهنمایی می‌کنند تا یک نود DOM، یا کامپوننت دیگری که توسط کاربر تعریف شده‌است را رندر کند.</li>\n<li><strong>آرایه‌ها و فرگمنت‌ها.</strong> به شما اجازه می‌دهد تا چند المنت را از رندر بازگردانید. مستندات <a href=\"/docs/fragments.html\">فرگمنت‌ها</a> را برای اطلاعات بیشتر مطالعه کنید.</li>\n<li><strong>پرتال‌ها.</strong> به شما اجازه می‌دهد تا فرزندان را در یک زیردرخت متفاوت DOM رندر کنید. مستندات <a href=\"/docs/portals.html\">پرتال‌ها</a> را برای اطلاعات بیشتر مطالعه کنید.</li>\n<li><strong>رشته متنی و اعداد.</strong> این‌ها به عنوان نودهای متنی در DOM رندر می‌شوند.</li>\n<li><strong>متغیرهای بولی یا <code class=\"gatsby-code-text\">null</code>.</strong> چیزی رندر نمی‌کنند. (به طور کلی برای پشتیبانی از الگوی <code class=\"gatsby-code-text\">return test &amp;&amp; &lt;Child /&gt;</code>، هنگامی که <code class=\"gatsby-code-text\">test</code> یک متغیر بولی است وجود دارد.)</li>\n</ul>\n<p>تابع <code class=\"gatsby-code-text\">render()</code> باید خالص باشد، به این معنی که نباید state را تغییر دهد، هر بار که فراخوانی می‌شود نتیجه یکسان بازمی‌گرداند و به صورت مستقیم با مرورگر تعاملی ندارد.</p>\n<p>اگر به تعامل با مرورگر نیاز دارید، عملیات خود را در <code class=\"gatsby-code-text\">componentDidMount()</code> یا دیگر متدهای چرخه‌ی حیات انجام دهید. خالص نگه داشتن <code class=\"gatsby-code-text\">render()</code> فکر کردن به کامپوننت‌ها را آسان‌تر می‌کند.</p>\n<blockquote>\n<p>نکته:</p>\n<p>تابع <code class=\"gatsby-code-text\">render()</code> فراخوانی نخواهد شد، اگر <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> مقدار false را بازگرداند.`<code class=\"gatsby-code-text\"></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>اگر state را در ابتدا مقداردهی نمی‌کنید و متدها را bind نمی‌کنید، نیازی به پیاده‌سازی سازنده برای کامپوننت ری‌اکت خود نیست.</strong></p>\n<p>سازنده‌ی یک کامپوننت ری‌اکت قبل از اجرای اولیه‌اش صدا زده می‌شود. هنگام پیاده‌سازی سازنده برای یک زیرکلاس <code class=\"gatsby-code-text\">React.Component</code>، شما باید <code class=\"gatsby-code-text\">super(props)</code> را قبل از هر قطعه کدی صدا بزنید. درغیراینصورت، <code class=\"gatsby-code-text\">this.props</code> در سازنده undefined خواهد بود که می‌تواند باعث بروز باگ شود.</p>\n<p>معمولا، سازنده‌ها تنها به دو دلیل در ری‌اکت استفاده می‌شوند:</p>\n<ul>\n<li>مقداردهی اولیه‌ی <a href=\"/docs/state-and-lifecycle.html\">state محلی</a> توسط انتصاب یک آبجکت به <code class=\"gatsby-code-text\">this.state</code>.</li>\n<li>Bind کردن متدهای <a href=\"/docs/handling-events.html\">event handler</a> به یک instance.</li>\n</ul>\n<p>شما <strong>به هیچ عنوان نیابد <code class=\"gatsby-code-text\">setState()</code> را در <code class=\"gatsby-code-text\">constructor()</code></strong> صدا بزنید. برای این کار، اگر کامپوننت شما به استفاده از state محلی نیاز دارد، <strong>state اولیه را مستقیما برابر <code class=\"gatsby-code-text\">this.state</code></strong> در سازنده قرار دهید:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">// Don't call this.setState() here!</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> counter<span class=\"token operator\">:</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>handleClick <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">handleClick</span><span class=\"token punctuation\">.</span><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>سازنده تنها جایی‌است که باید <code class=\"gatsby-code-text\">this.state</code> را مسقیما برابر مقداری قرار دهید. در دیگر متدها، نیاز دارید تا از <code class=\"gatsby-code-text\">this.setState()</code> استفاده کنید.</p>\n<p>از معرفی هرگونه تاثیر جانبی (side-effect) و یا ثبت اشتراک (subscription) در سازنده خودداری نمایید. برای چنین موارد، از <code class=\"gatsby-code-text\">componentDidMount()</code> استفاده کنید.</p>\n<blockquote>\n<p>نکته:</p>\n<p><strong>از کپی کردن props در state خودداری نمایید! این یک اشتباه رایج است:</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\">// Don't do this!</span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> color<span class=\"token operator\">:</span> props<span class=\"token punctuation\">.</span>color <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>مشکل اینجاست که هردو کار غیرضروری است (شما می‌توانید مستقیما از <code class=\"gatsby-code-text\">this.props.color</code> استفاده کنید )، و باگ ایجاد می‌کند (به‌روز رسانی‌های <code class=\"gatsby-code-text\">color</code> در prop تاثیری بر روی state نمی‌گذارد).</p>\n<p><strong>تنها در صورتی که می‌خواهید عمدا به‌روز رسانی‌های prop را نادیده بگیرید از این الگو استفاده کنید.</strong> در این صورت، منطقی است که prop را تغییر نام دهید که <code class=\"gatsby-code-text\">initialColor</code> یا <code class=\"gatsby-code-text\">defaultColor</code> صدا زده شود. در مواقع لزوم، می‌توانید یک کامپوننت را به وسیله <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">تغییر <code class=\"gatsby-code-text\">key</code></a> به “reset” کردن state داخلی‌اش مجبور کنید.</p>\n<p><a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">پست وبلاگ مربوط به خودداری از state مشتق شده</a> را بخوانید تا در صورتی که فکر می‌کنید نیاز به وابستگی بعضی state ها به props دارید، چگونگی انجام دادن آن را یاد بگیرید.</p>\n</blockquote>\n<hr>\n<h3 id=\"componentdidmount\"><a href=\"#componentdidmount\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">componentDidMount()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentDidMount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">componentDidMount()</code> فورا پس از اجرا و نصب اولیه‌ی یک کامپوننت (زمانی که در درخت درج می‌شود) صدا زده می‌شود. مقداردهی اولیه‌ای که نودهای DOM نیاز دارند باید اینجا باشد. در صورتی که نیاز دارید که از یک endpoint راه دور داده دریافت کنید، اینجا محل خوبی برای پیاده‌سازی درخواست‌‌های شبکه است.</p>\n<p>این متد مکان خوبی برای تنظیم کردن هرگونه اشتراک است. اگر این‌کار را انجام می‌دهید، لغو اشتراک در <code class=\"gatsby-code-text\">componentWillUnmount()</code> فراموش نکنید.</p>\n<p>شما <strong>ممکن است <code class=\"gatsby-code-text\">setState()</code> را فورا</strong> در <code class=\"gatsby-code-text\">componentDidMount()</code> <strong>صدا بزنید.</strong> این باعث یک رندر اضافی می‌شود، اما قبل از اینکه مرورگر صفحه را بروز کند اتفاق می‌افتد و تضمین می‌کند که حتی با وجود اینکه <code class=\"gatsby-code-text\">render()</code> در این مورد دو بار صدا زده خواهد شد، کاربر state واسطی را نخواهد دید. از این الگو با‌احتیاط استفاده کنید چرا که اغلب موارد باعث مشکلات کارایی خواهد شد. در عوض در اکثر موارد، شما باید بتوانید state اولیه را در <code class=\"gatsby-code-text\">constructor()</code> مقداردهی کنید. به هر حال این‌کار می‌تواند برای مواردی مانند modal ها و یا tooltip ها، زمانی که شما نیاز به بررسی یک نود DOM قبل از رندر شدن چیزی که وابسته به ابعاد و مکانش است دارید، ضروری باشد.</p>\n<hr>\n<h3 id=\"componentdidupdate\"><a href=\"#componentdidupdate\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">componentDidUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentDidUpdate</span><span class=\"token punctuation\">(</span>prevProps<span class=\"token punctuation\">,</span> prevState<span class=\"token punctuation\">,</span> snapshot<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">componentDidUpdate()</code> بلافاصله پس از رخ دادن هر به‌روز رسانی صدا زده می‌شود. این متد برای رندر اولیه صدا زده نمی‌شود.</p>\n<p>از این فرصت برای انجام عملیات بر روی DOM در زمانی که کامپوننت بروز شده‌است استفاده کنید. همچنین مکان مناسبی برای انجام درخواست‌های شبکه،  مادامی که props فعلی را با props قبلی مقایسه می‌کنید می‌باشد (برای مثال درخواست شبکه در صورتی که props تغییری نکرده است ضروری نیست).</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\">// Typical usage (don't forget to compare props):</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>userID <span class=\"token operator\">!==</span> prevProps<span class=\"token punctuation\">.</span>userID<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">fetchData</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>userID<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>شما ممکن است <strong><code class=\"gatsby-code-text\">setState()</code> را فورا</strong> در <code class=\"gatsby-code-text\">componentDidUpdate()</code> <strong>صدا بزنید</strong> اما در نظر داشته باشید که مانند مثال بالا <strong>باید در یک شرط قرار داشته باشد.</strong> در غیر اینصورت شما در یک حلقه‌ی بی‌نهایت گرفتار خواهید شد. همچنین باعث رندر اضافی می‌شود که گرچه برای کاربر قابل مشاهده نیست، می‌تواند بر روی کارایی کامپوننت تاثیر گذارد. اگر تلاش می‌کنید تا بعضی state ها را به یک prop که از بالا می‌آید “mirror” کنید، استفاده مستقیم از prop را به عنوان جایگزین در نظر بگیرید. در مورد <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">چرا کپی کردن props در state باعث باگ می‌شود؟</a> بخوانید.</p>\n<p>اگر کامپوننت شما چرخه‌ی حیات <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> را پیاده‌سازی می‌کند (که نادر است)، مقداری که برمی‌گرداند به عنوان پارامتر سوم “snapshot” به <code class=\"gatsby-code-text\">componentDidUpdate()</code> پاس داده می‌شود. در غیر اینصورت این پارامتر undefined خواهد بود.</p>\n<blockquote>\n<p>نکته</p>\n<p>اگر <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> مقدار false بازگرداند، <code class=\"gatsby-code-text\">componentDidUpdate()</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><code class=\"gatsby-code-text\">componentWillUnmount()</code> بلافاصله قبل از اینکه یک کامپوننت نابود شود صدا زده می‌شود. هر گونه پاکسازی ضروری مانند غیرفعالسازی تایمرها، لغو درخواست‌های شبکه و یا لغو اشتراک‌های ایجاد شده در <code class=\"gatsby-code-text\">componentDidMount()</code>، در این متد انجام می‌پذیرد.</p>\n<p>در <code class=\"gatsby-code-text\">componentWillUnmount()</code> <strong>نباید <code class=\"gatsby-code-text\">setState()</code> را صدا بزنید</strong> چرا که کامپوننت هیچگاه دوباره رندر نخواهد شد. به محض اینکه یک instance کامپوننت نابود می‌شود، هرگز دوباره نصب و اجرا نخواهد شد.</p>\n<hr>\n<h3 id=\"rarely-used-lifecycle-methods\"><a href=\"#rarely-used-lifecycle-methods\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>متدهای چرخه‌ی حیات با کاربرد کم </h3>\n<p>متدهای این بخش به موارد استفاده غیررایج مربوط هستند. آن‌ها یک زمانی کاربردی بودند، اما کامپوننت‌های شما احتمالا نیازی به هیچ‌یک از آن‌ها نخواهند داشت. <strong>شما می‌توانید اکثر این متدها را در <a href=\"https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">این دیاگرام چرخه‌ی حیات</a> ببینید. برای این منظور بر روی “Show less common lifecycles” در بالای ان کلیک کنید.</strong></p>\n<h3 id=\"shouldcomponentupdate\"><a href=\"#shouldcomponentupdate\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">shouldComponentUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">shouldComponentUpdate</span><span class=\"token punctuation\">(</span>nextProps<span class=\"token punctuation\">,</span> nextState<span class=\"token punctuation\">)</span></code></pre></div>\n<p>با استفاده از <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> به ری‌اکت می‌فهمانید که خروجی کامپوننت متاثر از تغییر کنونی در state یا props نیست. رفتار پیش‌فرض این متد، رندر دوباره به ازای هر تغییر در state است، که در اکثریت قریب به اتفاق موارد شما باید به رفتار پیش‌فرض آن اعتماد کنید.</p>\n<p><code class=\"gatsby-code-text\">shouldComponentUpdate()</code> قبل از رندر شدن در هنگام دریافت state یا props جدید صدا زده می‌شود. به طور پیش‌فرض مقدار <code class=\"gatsby-code-text\">true</code> برمی‌گرداند. این متد هنگام رندر اولیه یا زمانی که <code class=\"gatsby-code-text\">forceUpdate()</code> استفاده می‌شود صدا زده نمی‌شود.</p>\n<p>این متد تنها به عنوان یک <strong><a href=\"/docs/optimizing-performance.html\">بهینه‌سازی کارایی</a></strong> وجود دارد. برای جلوگیری از یک رندر از آن استفاده نکنید چرا که باعث بروز باگ‌ها می‌شود. استفاده از <strong><a href=\"/docs/react-api.html#reactpurecomponent\"><code class=\"gatsby-code-text\">PureComponent</code></a> داخلی</strong> را به جای نوشتن دستی <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> <strong>در نظر بگیرید.</strong> <code class=\"gatsby-code-text\">PureComponent</code> یک مقایسه سطحی میان props و state انجام می‌دهد و شانس اینکه شما یک بروزرسانی ضروری را رد کنی کاهش می‌دهد.</p>\n<p>اگر شما از نوشتن دستی آن مطمئن هستید، شما ممکن است <code class=\"gatsby-code-text\">this.props</code> را با <code class=\"gatsby-code-text\">nextProps</code> و <code class=\"gatsby-code-text\">this.state</code> را با <code class=\"gatsby-code-text\">nextState</code> مقایسه کنید و در صورتی که به‌روز رسانی می‌تواند رد شود با بازگرداندن <code class=\"gatsby-code-text\">false</code> این مورد را به ری‌اکت اطلاع دهید. توجه داشته باشید که بازگرداندن <code class=\"gatsby-code-text\">false</code>، کامپوننت‌‌های فرزند را در هنگام تغییرات state <em>آن‌ها</em>، از رندر شدن دوباره منع نمی‌کند.</p>\n<p>ما استفاده از بررسی‌های برابری‌ عمیق (deep equality checks) یا <code class=\"gatsby-code-text\">JSON.stringify()</code> را در <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> پیشنهاد نمی‌کنیم چرا که بسیار ناکارآمد است و به کارایی ضربه می‌زند.</p>\n<p>در حال حاضر، اگر <code class=\"gatsby-code-text\">shouldComponentUpdate()</code>، مقدار <code class=\"gatsby-code-text\">false</code> بازگرداند، <a href=\"#unsafe_componentwillupdate\"><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code></a>، <a href=\"#render\"><code class=\"gatsby-code-text\">render()</code></a> و <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate()</code></a> صدا زده نخواهند شد. در آینده ممکن است ری‌اکت با <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> به جای یک بخشنامه سختگیرانه، مانند یک راهنمایی رفتار کند و امکان دوباره رندر شدن کامپوننت در صورت بازگرداندن <code class=\"gatsby-code-text\">false</code> همچنان موجود باشد.</p>\n<hr>\n<h3 id=\"static-getderivedstatefromprops\"><a href=\"#static-getderivedstatefromprops\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">static getDerivedStateFromProps()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromProps</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">,</span> state<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">getDerivedStateFromProps</code> درست بعد از فراخوانی متد رندر، در هر دو حالت نصب و اجرای اولیه و به‌روز رسانی‌های بعد از آن صدا زده می‌شود. این متد باید یک آبجکت برای به‌روز رسانی state، و یا <code class=\"gatsby-code-text\">null</code> برای عدم به‌روز رسانی بازگرداند.</p>\n<p>این متد برای <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#when-to-use-derived-state\">موارد استفاده نادر</a> که state وابسته به تغییرات props در طول زمان است وجود دارد. برای مثال، ممکن است برای پیاده‌سازی یک کامپوننت <code class=\"gatsby-code-text\">&lt;Transition&gt;</code> که فرزند قبلی و بعدی خود را برای تصمیم‌گیری اینکه برای کدام‌یک انیمیشن ورود و برای کدام‌یک انیمیشن خروج را اعمال کند مقایسه می‌کند، کاربردی باشد.</p>\n<p>اشتقاق (deriving) state باعث طولانی‌تر شده کد می‌شود، و در نتیجه فکر کردن در مورد کامپوننت شما را سخت می‌کند.\n<a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">مطمئن شوید با جایگزین‌های ساده‌تر آشنا هستید:</a></p>\n<ul>\n<li>اگر نیاز به <strong>انجام یک تاثیر جانبی (side effect)</strong> (برای مثال fetch کردن داده یا اعمال انیمیشن) در پاسخ یک تغییر در props دارید، از متد چرخه‌ی حیات <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate</code></a> به عنوان جایگزین استفاده کنید.</li>\n<li>اگر می‌خواهید <strong>بعضی داده‌ها را فقط زمان تغییرات یک props محاسبه کنید</strong>، <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#what-about-memoization\">از یک memoization به عنوان جایگزین استفاده کنید</a>.</li>\n<li>اگر می‌خواهید <strong>بعضی state ها را زمان تغییرات یک prop “بازنشانی (reset)” کنید</strong>، ساخت یک کامپوننت <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-controlled-component\">کاملا کنترل شده</a> یا <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">کاملا کنترل نشده با یک <code class=\"gatsby-code-text\">key</code></a> را به عنوان جایگزین در نظر بگیرید.</li>\n</ul>\n<p>این متد به instance کامپوننت دسترسی ندارد. اگر مایل هستید، می‌توانید از بعضی کدها میان <code class=\"gatsby-code-text\">getDerivedStateFromProps()</code> و دیگر متدهای کلاس برای استخراج توابع خالص props کامپوننت و state، خارج از تعریف کلاس دوباره استفاده کنید.</p>\n<p>در نظر داشته باشید این متد بدون در نظر گرفتن دلیل، با <em>هر</em> رندر اجرا می‌شود. بنابراین با <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps</code> که در آن، نه اجرای یک <code class=\"gatsby-code-text\">setState</code> محلی، بلکه والد باعث یک رندر دوباره می‌شود، در تضاد است.</p>\n<hr>\n<h3 id=\"getsnapshotbeforeupdate\"><a href=\"#getsnapshotbeforeupdate\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">getSnapshotBeforeUpdate</span><span class=\"token punctuation\">(</span>prevProps<span class=\"token punctuation\">,</span> prevState<span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> درست قبل از آخرین خروجی رندر شده‌ای که به DOM سپرده شده‌است صدا زده می‌شود و کامپوننت شما را توانا می‌سازد تا بعضی اطلاعات را (مانند اسکرول کردن مکان صفحه) قبل از اینکه بالقوه تغییر کند از DOM بگیرد. هر مقداری که توسط ین چرخه‌ی حیات بازگردد به عنوان یک پارامتر به <code class=\"gatsby-code-text\">componentDidUpdate()</code> پاس داده خواهد شد.</p>\n<p>این مورد استفاده رایج نیست، اما ممکن است در رابط‌کاربری‌هایی مانند صفحه‌ی چت که کنترل مکان اسکرول به شکلی خاص نیاز است، رخ دهد.</p>\n<p>یک مقدار از snapshot (یا <code class=\"gatsby-code-text\">null</code>) باید بازگردانده شود.</p>\n<p>برای مثال:</p>\n<p><div class=\"gatsby-highlight\">\n        <pre class=\"gatsby-code-jsx\"><code><span class=\"token keyword\">class</span> <span class=\"token class-name\">ScrollingList</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>listRef <span class=\"token operator\">=</span> React<span class=\"token punctuation\">.</span><span class=\"token function\">createRef</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">getSnapshotBeforeUpdate</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">prevProps<span class=\"token punctuation\">,</span> prevState</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Are we adding new items to the list?</span>\n    <span class=\"token comment\">// Capture the scroll position so we can adjust scroll later.</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\">// If we have a snapshot value, we've just added new items.</span>\n    <span class=\"token comment\">// Adjust scroll so these new items don't push the old ones out of view.</span>\n    <span class=\"token comment\">// (snapshot here is the value returned from 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\">/* ...contents... */</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre>\n        </div></p>\n<p>در مثال بالا، خواندن ویژگی <code class=\"gatsby-code-text\">scrollHeight</code> در <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate</code> مهم است چرا که ممکن است تاخیرهایی بین فاز “رندر شدن” چرخه‌ی حیات (مانند <code class=\"gatsby-code-text\">render</code>) و فاز “commit” چرخه‌ی حیات (مانند <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate</code> و <code class=\"gatsby-code-text\">componentDidUpdate</code>) وجود داشته باشد.</p>\n<hr>\n<h3 id=\"error-boundaries\"><a href=\"#error-boundaries\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>مرزهای خطا (error boundaries) </h3>\n<p><a href=\"/docs/error-boundaries.html\">مرزهای خطا</a> کامپوننت‌های ری‌اکت هستند که خطاهای جاوااسکریپت را هر جایی در درخت کامپوننت‌های فرزندشان می‌گیرند، آن خطا‌ها را در کنسول در قالب لاگ نشان می‌دهند و یک UI به جای درخت کامپوننتی که با خطا مواجه شده‌است، نمایش می‌دهد. مرزهای خطا هنگام رندر شدن، در متدهای چرخه‌ی حیات و در سازنده‌های تمام درخت کامپوننت‌های زیر خود، خطا ها را می‌گیرند.</p>\n<p>یک کامپوننت از جنس کلاس در صورتی که هر یک از متدهای چرخه‌ی حیات <code class=\"gatsby-code-text\">static getDerivedStateFromError()</code>، <code class=\"gatsby-code-text\">componentDidCatch()</code> یا هردوی آن‌ها را پیاده‌سازی کند، یک مرز خطا می‌شود. به‌روز رسانی state از این متدهای چرخه‌ی حیات به شما اجازه می‌دهد تا خطاهای کنترل نشده‌ی جاوااسکریپتی در درخت زیر آن را بگیرید و یک رابط کاربری مناسب نمایش دهید.</p>\n<p>از مرزهای خطا تنها برای بازیابی از خطاهای غیرقابل پیش‌بینی استفاده کنید، <strong>برای کنترل جریان از آن‌ها استفاده نکنید.</strong></p>\n<p>برای اطلاعات بیشتر، <a href=\"/blog/2017/07/26/error-handling-in-react-16.html\"><em>کنترل خطاها در ری‌اکت ۱۶</em></a> را ببینید.</p>\n<blockquote>\n<p>نکته</p>\n<p>مرزهای خطا تنها می‌توانند خطاهای کامپوننت‌های درخت <strong>زیر</strong> خودشان را بگیرند. یک مرز خطا نمی‌تواند خطای درون خودش را بگیرد.</p>\n</blockquote>\n<h3 id=\"static-getderivedstatefromerror\"><a href=\"#static-getderivedstatefromerror\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">static getDerivedStateFromError()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromError</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span></code></pre></div>\n<p>این چرخه‌ی حیات بعد از اینکه یک خطا توسط کامپوننت‌های زاده اولادش رخ داد صدا زده می‌شود.\nخطایی که رخ داده است را به عنوان یک پارامتر دریافت می‌کند و باید یک مقدار برای به‌روز رسانی state بازگرداند.</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">ErrorBoundary</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromError</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">// Update state so the next render will show the fallback UI.</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token punctuation\">}</span></span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>hasError<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">      <span class=\"token comment\">// You can render any custom fallback UI</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>نکته</p>\n<p><code class=\"gatsby-code-text\">getDerivedStateFromError()</code> در فاز “رندر شدن” صدا زده می‌شود، بنابراین تاثیرات جانبی مجاز نیستند.\nبرای آن موارد، از <code class=\"gatsby-code-text\">componentDidCatch()</code> استفاده کنید.</p>\n</blockquote>\n<hr>\n<h3 id=\"componentdidcatch\"><a href=\"#componentdidcatch\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">componentDidCatch()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">componentDidCatch</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">,</span> info<span class=\"token punctuation\">)</span></code></pre></div>\n<p>این چرخه‌ی حیات بعد از اینکه یک خطا توسط کامپوننت‌های زاده اولاد رخ دهد صدا زده می‌شود.\nدو پارامتر دریافت می‌کند:</p>\n<ol>\n<li><code class=\"gatsby-code-text\">error</code> - خطایی که رخ داده است.</li>\n<li><code class=\"gatsby-code-text\">info</code> - یک آبجت با کلید <code class=\"gatsby-code-text\">componentStack</code> شامل <a href=\"/docs/error-boundaries.html#component-stack-traces\">اطلاعات در مورد اینکه در کدام کامپوننت خطا رخ داده است</a>.</li>\n</ol>\n<p><code class=\"gatsby-code-text\">componentDidCatch()</code> در فاز “commit” صدا زده می‌شود، بنابراین تاثیرات جانبی مجاز هستند.\nباید برای چیزهایی مانند لاگ کردن خطاها استفاده شود:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">ErrorBoundary</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> <span class=\"token function\">getDerivedStateFromError</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Update state so the next render will show the fallback UI.</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> hasError<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token function\">componentDidCatch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error<span class=\"token punctuation\">,</span> info</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">// Example \"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\">// You can render any custom fallback UI</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\">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>\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>نسخه‌های ساخته‌شده برای [محیط‌های] production (تولید) و development (توسعه) ری‌اکت تفاوت جزیی در چگونگی برخورد با خطا‌های <code class=\"gatsby-code-text\">componentDidCatch()</code> دارند.</p>\n<p>روی [محیط] توسعه، خطا‌ها به بالا حرکت می‌کنند تا به <code class=\"gatsby-code-text\">window</code> برسند، به این معنی که هرکدام از <code class=\"gatsby-code-text\">window.onerror</code> یا <code class=\"gatsby-code-text\">window.addEventListener(&#39;error&#39;, callback)</code> در مسیر خطاهای که توسط <code class=\"gatsby-code-text\">componentDidCatch()</code> گرفته شده‌اند، قرار می‌گیرند.</p>\n<p>روی [محیط] تولید، در عوض خطا‌ها به بالا حرکت نمی‌کنند، به این معنی که هر error handler تنها خطاهایی را دریافت می‌کند که توسط <code class=\"gatsby-code-text\">componentDidCatch()</code> تولید نشده‌اند.</p>\n<blockquote>\n<p>نکته</p>\n<p>هنگام رویداد یک خطا، شما می‌توانید با صدا زدن <code class=\"gatsby-code-text\">setState</code> یک UI به وسیله <code class=\"gatsby-code-text\">componentDidCatch()</code> رندر کند، اما این در انتشارهای آینده منسوخ خواهد شد.\nاز <code class=\"gatsby-code-text\">static getDerivedStateFromError()</code> برای کنترل رندر کردن UI هنگام بروز خطا استفاده نمایید.</p>\n</blockquote>\n<hr>\n<h3 id=\"legacy-lifecycle-methods\"><a href=\"#legacy-lifecycle-methods\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>متدهای چرخه‌ی حیات قدیمی </h3>\n<p>متدهای چرخه‌ی حیات زیر به عنوان “قدیمی” نشانه گذاری شده‌اند. آن‌ها همچنان کار می‌کنند، اما ما استفاده از آن‌ها را در کدهای جدید پیشنهاد نمی‌کنیم. شما می‌توانید <a href=\"/blog/2018/03/27/update-on-async-rendering.html\">در این مطلب وبلاگ</a> در مورد مهاجرت از متدهای چرخه‌ی حیات قدیمی بیشتر یاد بگیرید.</p>\n<h3 id=\"unsafe_componentwillmount\"><a href=\"#unsafe_componentwillmount\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">UNSAFE_componentWillMount()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">UNSAFE_componentWillMount</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<blockquote>\n<p>نکته</p>\n<p>این چرخه‌ی حیات قبلا <code class=\"gatsby-code-text\">componentWillMount</code> نام داشت. این اسم تا نسخه ۱۷ کار خواهد کرد. از <a href=\"https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code> codemod</a> برای به‌روز رسانی خودکار کامپوننت‌هایتان استفاده کنید.</p>\n</blockquote>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillMount()</code> درست قبل از اجرای اولیه صدا زده می‌شود. قبل از <code class=\"gatsby-code-text\">render()</code> صدا زده می‌شود، بنابراین صدا زدن <code class=\"gatsby-code-text\">setState()</code> به صورت همزمان (synchronously) در این متد باعث رندر اضافه نخواهد شد. عموما، ما استفاده از <code class=\"gatsby-code-text\">constructor()</code> را برای مقداردهی اولیه state پیشنهاد می‌کنیم.</p>\n<p>از معرفی هرگونه تاثیر جانبی و یا ثبت اشتراک در این متد خودداری کنید. برای چنین موارد استفاده‌ای، از <code class=\"gatsby-code-text\">componentDidMount()</code> استفاده کنید.</p>\n<p>این تنها متد چرخه‌ی حیاتی است که در رندر شدن سمت سرور صدا زده می‌شود.</p>\n<hr>\n<h3 id=\"unsafe_componentwillreceiveprops\"><a href=\"#unsafe_componentwillreceiveprops\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">UNSAFE_componentWillReceiveProps</span><span class=\"token punctuation\">(</span>nextProps<span class=\"token punctuation\">)</span></code></pre></div>\n<blockquote>\n<p>نکته</p>\n<p>این چرخه‌ی حیات قبلا <code class=\"gatsby-code-text\">componentWillReceiveProps</code> نام داشت. این نام تا نسخه ۱۷ کار خواهد کرد. برای به‌روز رسانی خودکار کامپوننت‌هایتان از <a href=\"https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code> codemod</a> استفاده نمایید.</p>\n</blockquote>\n<blockquote>\n<p>نکته:</p>\n<p>استفاده از این متد چرخه‌ی حیات اغلب منجر به باگ‌ها و ناپایداری‌ها می‌شود</p>\n<ul>\n<li>اگر نیاز به <strong>انجام یک اثر جانبی</strong> (برای مثال fetch کردن داده و یا اعمال انیمیشن) در پاسخ یک تغییر در props دارید، از چرخه‌ی حیات <a href=\"#componentdidupdate\"><code class=\"gatsby-code-text\">componentDidUpdate</code></a> به عنوان جایگزین استفاده نمایید.\nاگر از <code class=\"gatsby-code-text\">componentWillReceiveProps</code> برای <strong>محاسبه مجدد برخی داده‌ها زمانی که یک prop تغییر می‌کند</strong> دارید استفاده می‌کردید، <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#what-about-memoization\">از یک راهنمای memoization استفاده نمایید</a>.</li>\n<li>اگر از <code class=\"gatsby-code-text\">componentWillReceiveProps</code> برای <strong>“بازنشانی” کردن بعضی state ها هنگام تغییر یک prop</strong> استفاده می‌کردید، ایجاد یک کامپوننت <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-controlled-component\">کاملا کنترل شده</a> یا <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\">کاملا کنترل نشده با یک <code class=\"gatsby-code-text\">key</code></a> به عنوان جایگزین را در نظر بگیرید.</li>\n</ul>\n<p>برای چنین مواردی، <a href=\"/blog/2018/06/07/you-probably-dont-need-derived-state.html\">پیشنهادهای این مطلب وبلاگ در مورد state مشتق شده را دنبال کنید</a>.</p>\n</blockquote>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> قبل از اینکه یک کامپوننت ایجاد شده props جدید دریافت کند صدا زده می‌شود. اگر نیاز به بروزرسانی state در پاسخ به تغییرات prop دارید (برای مثال reset کردن آن)، ممکن است <code class=\"gatsby-code-text\">this.props</code> و <code class=\"gatsby-code-text\">nextProps</code> را مقایسه کنید و یک تغییر state به وسیله <code class=\"gatsby-code-text\">this.setState()</code> را در این متد انجام دهید.</p>\n<p>توجه داشته باشید که اگر یک کامپوننت والد، دلیل دوباره رندر شدن کامپوننت شما باشد، حتی اگر props تغییری نکرده باشد، این متد صدا زده می‌شود. بنابراین اگر می‌خواهید تغییرات را کنترل کنید، از مقایسه مقدار فعلی و بعدی آن مطمئن شوید.</p>\n<p>ری‌اکت <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> را با props اولیه هنگام <a href=\"#mounting\">اجرای اولیه</a> صدا نمی‌زند. فقط زمانی این متد صدا زده می‌شود که بعضی از props کامپوننت احتمال تغییر داشته باشند.\nصدا زدن <code class=\"gatsby-code-text\">this.setState()</code> عموما باعث اجرای <code class=\"gatsby-code-text\">UNSAFE_componentWillReceiveProps()</code> نمی‌شود.</p>\n<hr>\n<h3 id=\"unsafe_componentwillupdate\"><a href=\"#unsafe_componentwillupdate\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">UNSAFE_componentWillUpdate</span><span class=\"token punctuation\">(</span>nextProps<span class=\"token punctuation\">,</span> nextState<span class=\"token punctuation\">)</span></code></pre></div>\n<blockquote>\n<p>نکته</p>\n<p>این چرخه‌ی حیات قبلا <code class=\"gatsby-code-text\">componentWillUpdate</code> نام داشت. این اسم تا نسخه ۱۷ کار می‌کند. برای به‌روز رسانی خودکار کامپوننت‌هایتان از <a href=\"https://github.com/reactjs/react-codemod#rename-unsafe-lifecycles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">rename-unsafe-lifecycles</code> codemod</a> استفاده نمایید.</p>\n</blockquote>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> درست قبل از رندر شدن، زمانی که props یا state جدید دریافت می‌شوند صدا زده می‌شود. از این مورد به عنوان یک فرصت برای انجام آماده‌سازی‌های لازم قبل از به‌روز رسانی استفاده نمایید. این متد برای رندر اولیه صدا زده نمی‌شود.</p>\n<p>توجه داشته باشید که نمی‌توانید <code class=\"gatsby-code-text\">this.setState()</code> را اینجا صدا بزنید. همچنین نباید هیچ کار دیگری که باعث اجرای یک به‌روز رسانی برای یک کامپوننت ری‌اکت (مانند dispatch کردن یک اکشن ریداکس) می‌شود انجام دهید، پیش‌از آن‌که  <code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> مقداری را بازگرداند.</p>\n<p>معمولا، این متد می‌تواند با <code class=\"gatsby-code-text\">componentDidUpdate()</code> جایگزین شود. اگر شما در این متد چیزی را از DOM می‌خوانید (برای مثال ذخیره محل اسکرول)، می‌توانید آن منطق را به <code class=\"gatsby-code-text\">getSnapshotBeforeUpdate()</code> منتقل کنید.</p>\n<blockquote>\n<p>نکته</p>\n<p><code class=\"gatsby-code-text\">UNSAFE_componentWillUpdate()</code> در صورتی که <a href=\"#shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate()</code></a> مقدار false بازگرداند فراخوانی نمی‌شود.</p>\n</blockquote>\n<hr>\n<h2 id=\"other-apis-1\"><a href=\"#other-apis-1\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>دیگر API ها </h2>\n<p>برخلاف متدهای چرخه‌ی حیات بالا (که ری‌اکت برای شما صدا می‌زند)، متدهای زیر، متدهایی هستند که <em>شما</em> می‌توانید از کامپوننت‌هایتان صدا بزنید.</p>\n<p>فقط دو تا از آن‌ها وجود دارد: <code class=\"gatsby-code-text\">setState()</code> و <code class=\"gatsby-code-text\">forceUpdate()</code>.</p>\n<h3 id=\"setstate\"><a href=\"#setstate\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">setState()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span>updater<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>callback<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">setState()</code> تغییرات را در state کامپوننت درج می‌کند و به ری‌اکت می‌گوید که این کامپوننت و فزندانش نیاز به یک رندر دوباره با state بروز شده دارند. این متد اصلی است که شما برای به‌روز رسانی رابط کاربری در پاسخ به کنترل کننده‌های رویدادها (event handlers) و پاسخ‌های سرور استفاده می‌نمایید.</p>\n<p><code class=\"gatsby-code-text\">setState()</code> را به عنوان یک <em>درخواست</em> و نه یک دستور برای به‌روز رسانی کامپوننت در نظر بگیرید. برای حس کردن کارایی بهتر، ری‌اکت ممکن است آن را به تاخیر بیاندازد، و سپس چندین کامپوننت را در یک لحظه بروز کند. ری‌اکت تضمین نمی‌کند که تغییرات state فورا اعمال شوند.</p>\n<p><code class=\"gatsby-code-text\">setState()</code> همیشه در لحظه کامپوننت را بروز نمی‌کند. ممکن است تغییر را بسته‌بندی کرده و یا به تاخیر انداخته باشد. این موضوع خواندن <code class=\"gatsby-code-text\">this.state</code> درست پس از صدا زدن <code class=\"gatsby-code-text\">setState()</code> را به یک تله تبدیل کرده‌است. به جای اینکار، از <code class=\"gatsby-code-text\">componentDidUpdate</code> یا یک <code class=\"gatsby-code-text\">setState</code> callback (<code class=\"gatsby-code-text\">setState(updater, callback)</code>) استفاده کنید، که اجرا شدن هر دو پس از اینکه به‌روز رسانی اعمال شده است، تضمین شده است. اگر نیاز به ست کردن state بر اساس state قبلی دارید، در مورد آرگومان <code class=\"gatsby-code-text\">updater</code> در زیر بخوانید.</p>\n<p><code class=\"gatsby-code-text\">setState()</code> همیشه منجر به یک رندر دوباره می‌شود مگر اینکه <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> مقدار <code class=\"gatsby-code-text\">false</code> را بازگرداند. اگر در حال استفاده از آبجکت‌های قابل تغییر هستید و منطق رندرشدن شرطی نمی‌تواند در <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> پیاده‌سازی شود، صدا زدن <code class=\"gatsby-code-text\">setState()</code> تنها زمانی که state جدید با state قبلی متفاوت است از رندر دوباره غیرضروری جلوگیری می‌کند.</p>\n<p>اولین آگومان یک تابع <code class=\"gatsby-code-text\">updater</code> با این تعریف است:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token punctuation\">(</span><span class=\"token parameter\">state<span class=\"token punctuation\">,</span> props</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> stateChange</code></pre></div>\n<p><code class=\"gatsby-code-text\">state</code> یک مرجع برای state کامپوننت در زمانی که تغییرات اعمال می‌شوند، می‌باشد. نباید مستقیما تغییر کند. به جای این کار، تغییرات باید با ساخت یک آبجکت جدید بر اساس <code class=\"gatsby-code-text\">state</code> و <code class=\"gatsby-code-text\">props</code> ورودی بیان شوند. برای نمونه، فرض کنید می‌خواهیم یک مقدار در state را بر اساس <code class=\"gatsby-code-text\">props.step</code> افزایش دهیم: </p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">state<span class=\"token punctuation\">,</span> props</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>counter<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>counter <span class=\"token operator\">+</span> props<span class=\"token punctuation\">.</span>step<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>ضمانت می‌شود که هر دو مقدار <code class=\"gatsby-code-text\">state</code> و <code class=\"gatsby-code-text\">props</code> دریافت شده در تابع updater به‌روز باشند. خروجی updater به طور سطحی با <code class=\"gatsby-code-text\">state</code> ترکیب می‌شود.</p>\n<p>دومین پارامتر <code class=\"gatsby-code-text\">setState()</code> یک تابع callback اختیاری است که یک‌بار زمانی که <code class=\"gatsby-code-text\">setState</code> به طور کامل اجرا شده و کامپوننت دوباره رندر شده‌است، اجرا می‌شود. معمولا ما استفاده از <code class=\"gatsby-code-text\">componentDidUpdate()</code> را برای چنین منطق‌هایی پیشنهاد می‌کنیم.</p>\n<p>شما ممکن است به شکل اختیاری یک آبجکت را به جای تابع به عنوان آرگومان اول <code class=\"gatsby-code-text\">setState()</code> پاس دهید:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span>stateChange<span class=\"token punctuation\">[</span><span class=\"token punctuation\">,</span> callback<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>این یک ترکیب سطحی <code class=\"gatsby-code-text\">stateChange</code> با state جدید را اجرا می‌کند. برای مثال، تنظیم مقدار آیتم‌های یک سبد خرید:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>این شکل <code class=\"gatsby-code-text\">setState()</code> نیز هم‌زمان است و چندین فراخوانی در یک چرخه ممکن است باعث دسته‌بندی با یک‌دیگر شود. برای مثال، اگر اقدام به افزایش مقدار یک آیتم در یک چرخه یکسان بیش از یک‌بار کنید، نتیجه برابر خواهد بود با:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"gatsby-code-javascript\"><code class=\"gatsby-code-javascript\">Object<span class=\"token punctuation\">.</span><span class=\"token function\">assign</span><span class=\"token punctuation\">(</span>\n  previousState<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>quantity <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>quantity <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token operator\">...</span>\n<span class=\"token punctuation\">)</span></code></pre></div>\n<p>فراخوانی‌های متوالی باعث بازنشانی مقدارها از صدازدن‌های قبلی در چرخه یکسان خواهد شد، بنابراین مقدار تنها یکبار افزایش پیدا خواهد کرد. اگر state بعدی وابسته به state فعلی است، ما استفاده از شکل تابعی updater به جای این روش را پیشنهاد می‌کنیم:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">state</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>quantity<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>quantity <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>برای اطلاعات بیشتر موارد زیر را ببینید:</p>\n<ul>\n<li><a href=\"/docs/state-and-lifecycle.html\">راهنمای State و چرخه‌ی حیات</a></li>\n<li><a href=\"https://stackoverflow.com/a/48610973/458193\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">در اعماق: کی و چرا صدا زدن‌های <code class=\"gatsby-code-text\">setState()</code> دسته‌بندی می‌شوند؟ </a></li>\n<li><a href=\"https://github.com/facebook/react/issues/11527#issuecomment-360199710\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">در اعماق: چرا <code class=\"gatsby-code-text\">this.state</code> فورا به‌روز رسانی نمی‌شود؟ </a></li>\n</ul>\n<hr>\n<h3 id=\"forceupdate\"><a href=\"#forceupdate\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">forceUpdate()</code> </h3>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">component<span class=\"token punctuation\">.</span><span class=\"token function\">forceUpdate</span><span class=\"token punctuation\">(</span>callback<span class=\"token punctuation\">)</span></code></pre></div>\n<p>به طور پیش‌فرض، زمانی که state یا props کامپوننتتان تغییر می‌کند، کامپوننت شما دوباره رندر خواهد شد. اگر متد <code class=\"gatsby-code-text\">render()</code> شما وابسته به دیگر داده‌ها است، شما می‌توانید به وسیله <code class=\"gatsby-code-text\">forceUpdate()</code> به ری‌اکت بگویید که کامپوننت نیاز به رندر دوباره دارد.</p>\n<p>صدازدن <code class=\"gatsby-code-text\">forceUpdate()</code> باعث می‌شود <code class=\"gatsby-code-text\">render()</code> کامپوننت، بدون توجه به نتیجه <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> صدا زده شود. اینکار باعث اجرای متدهای چرخه‌ی حیات عادی کامپوننت‌های فرزند، شامل متد <code class=\"gatsby-code-text\">shouldComponentUpdate()</code> هر یک از فرزندان می‌‌شود. ری‌اکت همچنان فقط زمانی DOM را بروز می‌کند که markup تغییر کند.</p>\n<p>در حالت عادی باید تلاش کنید تا از تمامی استفاده‌های <code class=\"gatsby-code-text\">forceUpdate()</code> خودداری نمایید و در <code class=\"gatsby-code-text\">render()</code> فقط از <code class=\"gatsby-code-text\">this.props</code> و <code class=\"gatsby-code-text\">this.state</code> داده‌ها را بخوانید.</p>\n<hr>\n<h2 id=\"class-properties-1\"><a href=\"#class-properties-1\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ویژگی‌های کلاس </h2>\n<h3 id=\"defaultprops\"><a href=\"#defaultprops\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">defaultProps</code> </h3>\n<p><code class=\"gatsby-code-text\">defaultProps</code> می‌تواند به عنوان یک ویژگی خود کلاس کامپوننت، برای ست کردن props های پیش‌فرض کلاس تعریف شود. این برای props تعریف نشده استفاده می‌شود، اما نه برای props هایی که مقدار <code class=\"gatsby-code-text\">null</code> دارند. برای مثال:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">CustomButton</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span>\n\nCustomButton<span class=\"token punctuation\">.</span>defaultProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  color<span class=\"token operator\">:</span> <span class=\"token string\">'blue'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>اگر <code class=\"gatsby-code-text\">props.color</code> فراهم نشده باشد، به طور پیش‌فرض با مقدار <code class=\"gatsby-code-text\">&#39;blue&#39;</code> ست خواهد شد:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">CustomButton</span></span> <span class=\"token punctuation\">/></span></span> <span class=\"token punctuation\">;</span> <span class=\"token comment\">// props.color will be set to blue</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>اگر برای <code class=\"gatsby-code-text\">props.color</code> مقدار <code class=\"gatsby-code-text\">null</code> ست شده باشد، <code class=\"gatsby-code-text\">null</code> باقی خواهد ماند:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">CustomButton</span></span> <span class=\"token attr-name\">color</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span> <span class=\"token punctuation\">;</span> <span class=\"token comment\">// props.color will remain null</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<hr>\n<h3 id=\"displayname\"><a href=\"#displayname\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">displayName</code> </h3>\n<p>رشته متنی <code class=\"gatsby-code-text\">displayName</code> در پیام‌های عیب‌یابی استفاده می‌شوند. معمولا، شما نیازی به ست کردن صریح آن ندارید چرا که نام آن از اسم تابع یا کلاسی که کامپوننت را تعریف می‌کند گرفته می‌شود. اگر برای اهداف عیب‌یابی و یا هنگام ایجاد یک کامپوننت مرتبه بالاتر می‌خواهید نام متفاوتی را نمایش دهید، می‌توانید خودتان نام جدیدی را صریحا برای آن ست کنید. <a href=\"/docs/higher-order-components.html#convention-wrap-the-display-name-for-easy-debugging\">نام نمایش را برای عیب‌یابی آسان پوشش دهید</a> را برای اطلاعات بیشتر ببینید.</p>\n<hr>\n<h2 id=\"instance-properties-1\"><a href=\"#instance-properties-1\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ویژگی‌های Instance </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> شامل props هایی است که توسط صدازننده این کامپوننت تعریف شده‌اند. <a href=\"/docs/components-and-props.html\">کامپوننت و Props</a> را برای آشنایی بیشتر با props ببینید.</p>\n<p>به خصوص، <code class=\"gatsby-code-text\">this.props.children</code> یک prop مخصوص است و معمولا به جای خود تگ، در تگ‌های فرند و در قالب JSX تعریف می‌شوند.</p>\n<h3 id=\"state\"><a href=\"#state\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><code class=\"gatsby-code-text\">state</code> </h3>\n<p>state شامل داده‌های مشخص این کامپوننت است که ممکن است در طول زمان تغییر کند. state توسط کاربر تعریف می‌شود، و باید یک آبجکت ساده جاواساکریپتی باشد.</p>\n<p>اگر بعضی مقادیر برای رندر کردن و یا جریان داده استفاده نمی‌شوند (برای مثال یک timer ID)، شما مجبور نیستید در state قرار دهید. چنین مقادیری می‌توانند به عنوان زمینه روی instance کامپوننت تعریف شوند.</p>\n<p><a href=\"/docs/state-and-lifecycle.html\">State و چرخه‌ی حیات</a> را برای اطلاعات بیشتر در مورد state ببینید.</p>\n<p>هیچگاه <code class=\"gatsby-code-text\">this.state</code> را مستقیما تغییر ندهید، چرا که صدا زدن <code class=\"gatsby-code-text\">setState()</code> پس از آن ممکن است جایگزین تغییرات شما شود. با <code class=\"gatsby-code-text\">this.state</code> طوری که تغییرناپذیر است رفتار کنید.</p>","frontmatter":{"title":"React.Component","next":null,"prev":null},"fields":{"path":"content/docs/reference-react-component.md","slug":"docs/react-component.html"}}},"pageContext":{"slug":"docs/react-component.html"}},"staticQueryHashes":[]}