{"componentChunkName":"component---src-templates-docs-js","path":"/docs/hooks-state.html","result":{"data":{"markdownRemark":{"html":"<p><em>هوک‌ها</em> پس از انتشار نسخه‌ی 16.8 به ری‌اکت اضافه شده‌اند. آن‌ها به شما اجازه می‌دهند که از state و دیگر قابلیت های ری‌اکت بدون نوشتن کلاس استفاده کنید.</p>\n<p>در <a href=\"/docs/hooks-intro.html\">صفحه‌ی معرفی</a> از این مثال برای معرفی هوکها استفاده شد:</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\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Example</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 comment\">// \"count\" جدید به نام state تعریف کردن یک متغیر</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></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 punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">You clicked </span><span class=\"token punctuation\">{</span>count<span class=\"token punctuation\">}</span><span class=\"token plain-text\"> times</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">setCount</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">        Click me</span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>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></code></pre></div>\n<p>ما با مقایسه این کد با یک مثال مشابه که بر پایه کلاس نوشته شده‌است، یادگیری هوک‌ها را شروع می‌کنیم.</p>\n<h2 id=\"equivalent-class-example\"><a href=\"#equivalent-class-example\" 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>اگر قبلا از کلاس‌ها در ری‌اکت استفاده کرده‌باشید، این کد باید برای شما آشنا باشد:</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\">Example</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>\n      count<span class=\"token operator\">:</span> <span class=\"token number\">0</span>\n    <span class=\"token punctuation\">}</span><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 punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">You clicked </span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">}</span><span class=\"token plain-text\"> times</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> count<span class=\"token operator\">:</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n          Click me\n        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\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></div>\n<p>این state در شروع به عنوان <code class=\"gatsby-code-text\">{ count: 0 }</code> تعریف شده‌است، و ما مقدار <code class=\"gatsby-code-text\">state.count</code> را وقتی که کاربر روی دکمه کلیک می‌کند با استفاده از <code class=\"gatsby-code-text\">this.setState()</code> افزایش می‌دهیم. ما همواره از این الگو در تمام صفحه استفاده می‌کنیم.</p>\n<blockquote>\n<p>توجه:</p>\n<p>شاید برای شما این سوال پیش بیاید که چرا ما استفاده از یک شمارنده(counter) را به استفاده از یک مثال واقعی‌تر ترجیح داده‌ایم. چون این به ما کمک می‌کند تا روی API تمرکز کنیم در حالی که هنوز در اول راه یادگیری هوک‌ها هستیم.</p>\n</blockquote>\n<h2 id=\"hooks-and-function-components\"><a href=\"#hooks-and-function-components\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>هوک‌ها و کامپوننت‌های تابعی </h2>\n<p>به‌عنوان یک یادآوری، کامپوننت‌های تابعی در ری‌اکت به شکل زیر هستند:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Example</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// شما می‌توانید از هوک‌ها در اینجا استفاده کنید!</span>\n  <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>یا به این شکل:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">function</span> <span class=\"token function\">Example</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// شما می‌توانید از هوک‌ها در اینجا استفاده کنید!</span>\n  <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p> شاید شما در گذشته این کامپوننت‌ها را با نام “کامپوننت‌های بدون state” می‌شناختید. ما حالا قابلیتی را معرفی می‌کنیم که با استفاده از آن می‌توانید از state ری‌اکت در این نوع کامپوننت‌ها استفاده کنید، بنابراین ما این نوع کامپوننت ها را “کامپوننت تابعی” می‌نامیم.</p>\n<p>شما <strong>نمی توانید</strong> از هوک‌ها در کلاس‌ها استفاده کنید. ولی با استفاده از آن‌ها دیگر احتیاجی به نوشتن کلاس نخواهید داشت.</p>\n<h2 id=\"whats-a-hook\"><a href=\"#whats-a-hook\" 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>مثال جدید خود را با import کردن هوک <code class=\"gatsby-code-text\">useState</code> از ری‌اکت شروع می‌کنیم:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"gatsby-highlight-code-line\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span></span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">Example</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// ...</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>هوک چیست؟</strong> هوک یک تابع ویژه است که به شما اجازه می‌دهد از امکانات ری‌اکت استفاده کنید. برای مثال، هوک <code class=\"gatsby-code-text\">useState</code> به شما این امکان را می‌دهد که از state در کامپوننت‌های تابعی استفاده کنید. هوک‌های دیگری هم وجود دارند که به یادگیری آن‌ها در آموزش‌های بعدی می‌پردازیم.</p>\n<p><strong>چه زمانی می‌توانم از هوک استفاده کنم؟</strong> اگر شما یک کامپوننت تابعی بنویسید و متوجه شوید که نیاز به استفاده از state در آن دارید، در گذشته و قبل از معرفی هوک‌ها مجبور بودید که کامپوننت خود را به کلاس کامپوننت تبدیل کنید. حالا با معرفی هوک‌ها می‌توانید هر وقت که بخواهید در کامپوننت‌های تابعی خود از state استفاده کنید. ما در ادامه این کار را انجام خواهیم داد!</p>\n<blockquote>\n<p>توجه:</p>\n<p>چند قانون ویژه درباره‌ این که چه جا‌هایی از کامپوننت می‌توانید یا نمی‌توانید از هوک‌ها استفاده کنید وجود دارد. که باید آن‌ها را در <a href=\"/docs/hooks-rules.html\">قوانین هوک‌ها</a> یاد بگیریم.</p>\n</blockquote>\n<h2 id=\"declaring-a-state-variable\"><a href=\"#declaring-a-state-variable\" 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>تعریف کردین متغیر state </h2>\n<p>حلا قصد داریم که مقدار اولیه <code class=\"gatsby-code-text\">count</code> را در درون state، عدد <code class=\"gatsby-code-text\">0</code> تعریف کنیم. بدین منظور، در سازنده‌ی کلاس <code class=\"gatsby-code-text\">this.state</code> را معادل <code class=\"gatsby-code-text\">{count: 0}</code> تعریف می‌کنیم.</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\">Example</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=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">      count<span class=\"token operator\">:</span> <span class=\"token number\">0</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></span>  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>در یک کامپوننت تابعی، کلید واژه‌ی <code class=\"gatsby-code-text\">this</code> وجود ندارد، پس ما نمی توانیم مقدار <code class=\"gatsby-code-text\">this.state</code> را بخوانیم و یا مقداری را به آن اختصاص دهیم. در عوض، ما می‌توانیم از هوک <code class=\"gatsby-code-text\">useState</code> به‌طور مستقیم در کامپوننت خود استفاده کنیم:</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\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Example</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 comment\">// \"count\" جدید به نام state تعریف کردن یک متغیر</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span></code></pre></div>\n<p><strong>با استفاده از <code class=\"gatsby-code-text\">useState</code> چه کار‌هایی می‌توان انجام داد؟</strong> هدف کلی آن تعریف کردن “متغیر state” است. ما در اینجا متغیری به نام <code class=\"gatsby-code-text\">count</code> داریم ولی می‌توانیم نام دلخواه، مثل <code class=\"gatsby-code-text\">banana</code> هم برای آن انتخاب کنیم. این یک راه برای “حفظ” برخی مقادیر میان تماس‌های تابعی است — <code class=\"gatsby-code-text\">useState</code> یک راه جدید است که دقیقا امکانات مشابه <code class=\"gatsby-code-text\">this.state</code> در کلاس را فراهم می‌کند. به طور معمول، مقادیر موجود در تابع پس از بسته شدن تابع از بین می‌روند ولی متغیر state پس از بسته شدن تابع هم توسط ری‌اکت حفظ می‌شود.</p>\n<p><strong>چه چیزی را به عنوان آرگومان به <code class=\"gatsby-code-text\">useState</code> پاس می‌دهیم؟</strong> تنها آرگومانی که به هوک <code class=\"gatsby-code-text\">useState()</code> می‌دهیم مقدار اولیه‌ی state است. بر خلاف کاری که در کلاس ها انجام می‌دهیم، state حتما نباید یک object باشد. اگر ما به Number یا String احتیاج داریم می توانیم state را به عنوان Number یا String تعریف کنیم. در مثال، ما فقط به یک عدد احتیاج داریم که بفهمیم کاربر چند بار کلیک کرده‌است، پس <code class=\"gatsby-code-text\">0</code> را به عنوان مقدار اولیه‌ی state خود به useState پاس‌ ‌می‌دهیم. (اگر ما بخواهیم دو مقدار متفاوت را در state ذخیره کنیم، باید دوبار از <code class=\"gatsby-code-text\">useState()</code> استفاده کنیم.)</p>\n<p><strong><code class=\"gatsby-code-text\">useState</code> چه چیزی را بر می‌گرداند؟</strong> این هوک یک جفت آیتم را بر می‌گرداند: یک state به نام count و یک تابع برای به‌روزرسانی مقدار آن. به این دلیل است که ما آن را به صورت <code class=\"gatsby-code-text\">const [count, setCount] = useState()</code> نوشته‌ایم. این مقادیر مشابه <code class=\"gatsby-code-text\">this.state.count</code> و <code class=\"gatsby-code-text\">this.setState</code> در کلاس کامپوننت هستند، اگر شما با این نوع syntax آشنایی ندارید، ما در  <a href=\"/docs/hooks-state.html#tip-what-do-square-brackets-mean\">پایین این صفحه</a> به آن می‌پردازیم.</p>\n<p>حالا که متوجه کاربرد هوک <code class=\"gatsby-code-text\">useState</code> شدیم، باید مثال ما را بهتر متوجه شوید:</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\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Example</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 comment\">// \"count\" جدید به نام state تعریف کردن یک متغیر</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span></code></pre></div>\n<p>ما یک متغیر state به نام <code class=\"gatsby-code-text\">count</code> تعریف کرده‌ایم، و مقدار آن را برابر <code class=\"gatsby-code-text\">0</code> قرار داده‌ایم. ری‌اکت مقدار این state را میان رندر کردن دوباره‌ی کامپوننت حفظ می‌کند، و جدیدترین مقدار آن را برای تابع فراهم می‌کند. اگر ما بخواهم مقدار <code class=\"gatsby-code-text\">count</code> را به‌روزرسانی کنیم، می‌توانیم از <code class=\"gatsby-code-text\">setCount</code> استفاده کنیم.</p>\n<blockquote>\n<p>توجه:</p>\n<p>شاید براتون این سوال پیش بیاد: چرا از اسم <code class=\"gatsby-code-text\">useState</code> استفاده کردیم و به جای آن از اسم  <code class=\"gatsby-code-text\">createState</code> استفاده نکردیم؟</p>\n<p>استفاده از نام “Create” بسیار دقیق نخواهد بود چون یک state فقط در زمان اولین رندر یک کامپوننت ساخته می‌شود. در هنگام رندر های بعدی، <code class=\"gatsby-code-text\">useState</code> فقط مقدار state را به ما می‌دهد. در غیر این صورت اگر قرار بود در هر رندر یک state با همان مقدار ساخته شود که دیگر state نبودند! یک دلیل دیگر هم وجود دارد <em>همیشه</em> نام هوک‌ها با <code class=\"gatsby-code-text\">use</code> شروع می‌شود.دلیل این را هم می‌توانید در <a href=\"/docs/hooks-rules.html\">قوانین هوک‌ها</a> مطالعه کنید.</p>\n</blockquote>\n<h2 id=\"reading-state\"><a href=\"#reading-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>خواندن State </h2>\n<p>وقتی که ما بخواهیم مقدار شمارش فعلی را نمایش دهیم، از <code class=\"gatsby-code-text\">this.state.count</code> می‌خوانیم:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">You clicked </span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">}</span><span class=\"token plain-text\"> times</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>در تابع، ما می‌توانیم به طور مستقیم از <code class=\"gatsby-code-text\">count</code> استفاده کنیم:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">You clicked </span><span class=\"token punctuation\">{</span>count<span class=\"token punctuation\">}</span><span class=\"token plain-text\"> times</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h2 id=\"updating-state\"><a href=\"#updating-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>به‌روزرسانی State </h2>\n<p>در کلاس، ما باید با استفاده از <code class=\"gatsby-code-text\">this.setState()</code> مقدار state <code class=\"gatsby-code-text\">count</code> را به‌روزرسانی کنیم:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"gatsby-highlight-code-line\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> count<span class=\"token operator\">:</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>state<span class=\"token punctuation\">.</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">    Click me</span>\n<span class=\"token plain-text\">  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>در تابع، ما از قبل <code class=\"gatsby-code-text\">setCount</code> و <code class=\"gatsby-code-text\">count</code> به عنوان یک متغیر تعریف کرد‌ایم پس دیگر احتیاج به استفاده از کلید واژه‌ی <code class=\"gatsby-code-text\">this</code> نداریم:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"gatsby-highlight-code-line\">  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">setCount</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">    Click me</span>\n<span class=\"token plain-text\">  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h2 id=\"recap\"><a href=\"#recap\" 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>حالا بیاید <strong>خلاصه چیزهایی که یادگرفته‌ایم را خط به خط برسی کنیم</strong> و بفهمیم چه چیزهایی یاد گرفته‌ایم.</p>\n<!--\n  I'm not proud of this line markup. Please somebody fix this.\n  But if GitHub got away with it for years we can cheat.\n-->\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"gatsby-highlight-code-line\"> <span class=\"token number\">1</span><span class=\"token operator\">:</span>  <span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span></span> <span class=\"token number\">2</span><span class=\"token operator\">:</span>\n <span class=\"token number\">3</span><span class=\"token operator\">:</span>  <span class=\"token keyword\">function</span> <span class=\"token function\">Example</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 number\">4</span><span class=\"token operator\">:</span>    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span> <span class=\"token number\">5</span><span class=\"token operator\">:</span>\n <span class=\"token number\">6</span><span class=\"token operator\">:</span>    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n <span class=\"token number\">7</span><span class=\"token operator\">:</span>      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\"> 8:        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">You clicked </span><span class=\"token punctuation\">{</span>count<span class=\"token punctuation\">}</span><span class=\"token plain-text\"> times</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\"> 9:        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">setCount</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">10:         Click me</span>\n<span class=\"token plain-text\">11:        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">12:      </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 number\">13</span><span class=\"token operator\">:</span>    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token number\">14</span><span class=\"token operator\">:</span>  <span class=\"token punctuation\">}</span></code></pre></div>\n<ul>\n<li><strong>خط ۱:</strong> ما هوک <code class=\"gatsby-code-text\">useState</code> را از ری‌اکت import کردیم. که به شما اجازه‌ی استفاده از state را در تابع می‌دهد.</li>\n<li><strong>خط ۴:</strong> در تابع کامپوننت <code class=\"gatsby-code-text\">Example</code>، ما با استفاده از هوک <code class=\"gatsby-code-text\">useState</code> یک متغیر state تعریف کرده‌ایم. که بر اساس اسم‌هایی که به آن می‌دهیم یک جفت آیتم را بر می‌گرداند. ما اسم متغیر خود را را <code class=\"gatsby-code-text\">count</code> گذاشتیم چون مقدار تعداد کلیک‌هایی که روی دکمه می‌کنیم را در خود نگه می‌دارد. ما مقدار اولیه آن را به‌وسیله‌ی پاس دادن  <code class=\"gatsby-code-text\">0</code> به عنوان آرگومان به <code class=\"gatsby-code-text\">useState</code> برابر <code class=\"gatsby-code-text\">0</code> قرار داده‌ایم. مقدار دومی که <code class=\"gatsby-code-text\">useState</code> برمی‌گرداند یک تابع است. این تابع به شما اجازه می‌دهد که مقدار <code class=\"gatsby-code-text\">count</code> را به‌روزرسانی کنید پس ما اسم آن را <code class=\"gatsby-code-text\">setCount</code> می‌گذاریم.</li>\n<li><strong>خط ۹:</strong> وقتی که کاربر روی دکمه کلیک می‌کند، ما با استفاده از <code class=\"gatsby-code-text\">setCount</code> مقدار جدید را به state <code class=\"gatsby-code-text\">count</code> می‌دهیم. سپس ری‌اکت کامپوننت <code class=\"gatsby-code-text\">Example</code> را دوباره رندر می‌کند، و مقدار جدید <code class=\"gatsby-code-text\">count</code> را به آن پاس می‌دهد.</li>\n</ul>\n<p>حجم مطالب ممکن است باری یادگیری در اولین بار زیاد به نظر برسد. ولی عجله نکنید! اگر شما هر کدام از توضیحات را متوجه نشده‌اید، مثال بالا را دوباره بخوانید و سعی کنید یک بار دیگر مطالب را از بالا به پایین با دقت بخوانید. ما به شما این قول را می‌دهیم اگر یکبار دیگر تلاش به خواندن این مطلب بکنید “فراموش می‌کنید” که state در کلاس‌ها چگونه کار می‌کند.</p>\n<h3 id=\"tip-what-do-square-brackets-mean\"><a href=\"#tip-what-do-square-brackets-mean\" 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>شاید متوجه استفاده از کروشه([]) موقع تعریف متغیر state شده‌باشید:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>اسم‌های سمت چپ جزئی از API ری‌اکت نیستند. و شما می‌توانید نام دلخواه برای متغیر استفاده کنید:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>fruit<span class=\"token punctuation\">,</span> setFruit<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token string\">'banana'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>این یک syntax جاوا‌اسکریپت به نام <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Array_destructuring\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">“array destructuring”</a> است. و به این معنی که ما دو متغیر به نام‌های  <code class=\"gatsby-code-text\">fruit</code> و <code class=\"gatsby-code-text\">setFruit</code> را تعریف کرده‌ایم. تابع <code class=\"gatsby-code-text\">useState</code> دو مقدار را باز می‌گرداند که به ترتیب به <code class=\"gatsby-code-text\">fruit</code> و <code class=\"gatsby-code-text\">setFruit</code> اختصاص داده می‌شوند. کد زیر مشابه همین کار را انجام می‌دهد:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token keyword\">var</span> fruitStateVariable <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token string\">'banana'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// یک جفت آیتم را باز می‌گرداند</span>\n  <span class=\"token keyword\">var</span> fruit <span class=\"token operator\">=</span> fruitStateVariable<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// آیتم اول</span>\n  <span class=\"token keyword\">var</span> setFruit <span class=\"token operator\">=</span> fruitStateVariable<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// آیتم دوم</span></code></pre></div>\n<p>وقتی که ما توسط <code class=\"gatsby-code-text\">useState</code> یک متغیر state تعریف می‌کنیم، <code class=\"gatsby-code-text\">useState</code> یک جفت آیتم را بازمی‌گرداند — یک آرایه با دو آیتم. آیتم اول حاوی مقدار متغیر است، و آیتم دوم یک تابع برای به‌روزرسانی مقدار آن است. استفاده از <code class=\"gatsby-code-text\">[0]</code> و <code class=\"gatsby-code-text\">[1]</code> برای دسترسی ممکن است مقداری گمراه‌کننده باشد چون ما موقع کار با آرایه‌ از آن‌ها استفاده می‌کنیم  برای همین ما به به‌جای آن از  array destructuring استفاده می‌کنیم.</p>\n<blockquote>\n<p>توجه:</p>\n<p>شاید کنجکاو باشید که بدانید که ری‌اکت چگونه میفهمد که هر <code class=\"gatsby-code-text\">useState</code> با کدام کامپوننت مطابقت دارد در صورتی که ما هیچ چیزی مانند کلید واژه‌ی <code class=\"gatsby-code-text\">this</code> را به ری‌اکت پاس نمی‌دهیم. ما به <a href=\"/docs/hooks-faq.html#how-does-react-associate-hook-calls-with-components\">این سوال</a> و سوالات دیگر در بخش پرسش و پاسخ جواب داده‌ایم.</p>\n</blockquote>\n<h3 id=\"tip-using-multiple-state-variables\"><a href=\"#tip-using-multiple-state-variables\" 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>نکته: استفاده از چندین متغیر state </h3>\n<p>تعریف کردن متغیر state به عنوان جفت <code class=\"gatsby-code-text\">[something, setSomething]</code> می‌تواند برای ما مفید باشد چون به ما این امکان را می‌دهد که از اسامی <em>مختلف</em> برای نام گذاری state ها استفاده کنیم اگر بخواهیم بیشتر از یک state تعریف کینم:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">function</span> <span class=\"token function\">ExampleWithManyStates</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// state تعریف کردن چندین!</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>age<span class=\"token punctuation\">,</span> setAge<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">42</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>fruit<span class=\"token punctuation\">,</span> setFruit<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token string\">'banana'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>todos<span class=\"token punctuation\">,</span> setTodos<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span> text<span class=\"token operator\">:</span> <span class=\"token string\">'Learn Hooks'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>در کامپوننت بالا، ما متغیر‌های <code class=\"gatsby-code-text\">age</code>، <code class=\"gatsby-code-text\">fruit</code> و <code class=\"gatsby-code-text\">todos</code> را داریم، و می‌توانیم هر کدام را جداگانه به‌روزرسانی کنیم:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\">  <span class=\"token keyword\">function</span> <span class=\"token function\">handleOrangeClick</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// this.setState({ fruit: 'orange' }) مشابه</span>\n    <span class=\"token function\">setFruit</span><span class=\"token punctuation\">(</span><span class=\"token string\">'orange'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>شما <strong>مجبور نیستید</strong> متغیرهای state زیادی تعریف کنید. چون متغیرهای state توانایی نگه‌داری object و array را هم دارد، پس می‌توانید مقدارهای مربوط به هم را به عنوان یک گروه تعریف کنید. با این حال، برخلاف <code class=\"gatsby-code-text\">this.setState</code> در کلاس، به‌روزرسانی یک متغیر state همیشه به جای ترکیب کردن از <em>جایگزین</em> کردن استفاده می‌کند.</p>\n<p>ما توصیه‌های بیشتری را درباره‌ی متغیر state <a href=\"/docs/hooks-faq.html#should-i-use-one-or-many-state-variables\">در بخش پرسش و پاسخ</a> فراهم کرده‌ایم.</p>\n<h2 id=\"next-steps\"><a href=\"#next-steps\" 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\">useStae</code> که توسط ری‌اکت فراهم شده‌است را یاد گرفته‌ایم. همچین ما گاهی اوقات از آن به عنوان “State Hook” یاد می‌کنیم. که به ما این امکان را می‌دهد که از state در کامپوننت تابعی استفاده‌ کنیم  — که این امکان برای اولین بار فراهم شده‌است!</p>\n<p>همچنین ما درباره‌ی هوک‌ها بیشتر یاد گرفته‌ایم. و فهمیدیم که هوک‌ها توابعی هستند که به ما امکان استفاده از امکانات ری‌اکت را در کامپوننت تابعی می‌دهند. نام آن‌ها همیشه با <code class=\"gatsby-code-text\">use</code> شروع می‌شود، و هوک‌های دیگری هم وجود دارند که در آینده با آن‌ها آشنا خواهیم شد.</p>\n<p><strong>حالا با <a href=\"/docs/hooks-effect.html\">یادگیری هوک بعدی: <code class=\"gatsby-code-text\">useEffect</code></a></strong> ادامه دهید که به شما امکانات مشابه method چرخه‌ی حیات که در کلاس کامپوننت وجود دارد را می‌دهد.</p>","frontmatter":{"title":"استفاده از هوک state","next":"hooks-effect.html","prev":"hooks-overview.html"},"fields":{"path":"content/docs/hooks-state.md","slug":"docs/hooks-state.html"}}},"pageContext":{"slug":"docs/hooks-state.html"}},"staticQueryHashes":[]}