state ها در ری اکت
فهرست مطالب
Toggleسلام به همه ی دوستان, امیدوارم هرجا هستید عالی باشید.
میخاییم توی این مقاله state هارا در ری اکت برررسی کنم و اول اصلا ببینیم چی هستن و به چه درد میخورن بعد بریم سراغ حل یک مثال.
State یک شیء جاوا اسکریپت است که دادههای دینامیک کامپوننت را نگهداری میکند و آن را قادر میسازد که تغییرات بین رندرها را ردگیری کند. البته توجه داشته باشید از آنجا که state ها داینامیک هستند نمیتوان آنرا در پروژه های استاتیک صفحه به کاربرد.
خب ما در ادامه دوتا مثال مختلف از state ها میزنیم.
روش اول یک state را درون یک کامپوننت کلاس تعریف میکنیم.
کامپوننتها به صورت کلاسهایی تعریف میشوند که ویژگیهای اضافی دارند. State محلی دقیقاً به معنای یک ویژگی است که تنها در کلاسها وجود دارد. State صرفاً درون کلاس میتواند مورد استفاده قرار گیرد و معمولاً تنها جایی است که میتوان this.state را به عنوان سازنده مطرح کرد.
class Timer extends React.Component {
constructor() {
super();
this.state = {
time: new Date().toLocaleTimeString()
// front code
}
}
render() {
setInterval(()=>{
this.setState({
time:new Date().toLocaleTimeString()
// وبسایت فرانت کد
})
},1000)
return (
time is: {this.state.time}
)
}
}
در کد بالا ما اومدیم یک کامپوننت کلاسی تعریف کردیم
تعریف کلاس و سازنده (Constructor):.
- کلاس به نام
Timer
تعریف شده که ازReact.Component
ارثبری میکند. - در سازنده (constructor)،
super()
فراخوانی میشود تا سازنده کلاس والد (React.Component
) نیز فراخوانی شود. this.state
تنظیم میشود تا شامل یک ویژگیtime
باشد که زمان فعلی را به صورت رشتهای ذخیره میکند.
- کلاس به نام
متد
render
:- متد
render
مسئول رندر کردن JSX است که در اینجا یک عنصر<h3>
با کلاسtimer
و متن “time is: {this.state.time}” است. setInterval
درونrender
قرار دارد که هر ثانیه (1000 میلیثانیه
) یکبار فراخوانی میشود.- در هر فراخوانی
setInterval
، متدthis.setState
فراخوانی میشود تا ویژگیtime
درstate
به زمان فعلی بهروزرسانی شود.
- متد
خروجی را در عکس زیر ببینید:
- این کامپوننت هر ثانیه بهروزرسانی میشود و زمان فعلی را درون عنصر
<h3>
نمایش میدهد.
- این کامپوننت هر ثانیه بهروزرسانی میشود و زمان فعلی را درون عنصر
نکته: قرار دادن setInterval
درون render
ممکن است باعث مشکلات عملکردی شود، زیرا هر بار که کامپوننت رندر میشود، یک تایمر جدید ایجاد میشود. بهتر است setInterval
را در متد componentDidMount
قرار دهید تا فقط یکبار پس از اولین رندر اجرا شود.
روش دوم استفاده از هوک ها هستش به این روش ما میتونیم state هارو استفاده کنیم
import React from 'react';
import ReactDOM from 'react-dom/client';
import {useState} from "react";
import './style.css'
const Counter = () =>{
const [count,setCount] = useState(0)
function next()
{
setCount(count + 1)
}
function previus()
{
setCount(count - 1)
}
return(
{count}
)
}
این کد یک کامپوننت تابعی React به نام Counter
را تعریف میکند که یک شمارنده ساده را پیادهسازی میکند. بیایید قدم به قدم آن را بررسی کنیم:
تعریف کامپوننت و استفاده از
useState
:const Counter = () => { const [count, setCount] = useState(0);
- اینجا یک کامپوننت تابعی به نام
Counter
تعریف شده است. - از هوک
useState
برای مدیریت حالت (state) استفاده شده است.count
مقدار شمارنده را نگه میدارد وsetCount
تابعی است که برای بهروزرسانیcount
استفاده میشود. مقدار اولیهcount
برابر با 0 است.
- اینجا یک کامپوننت تابعی به نام
تعریف توابع
next
وprevius
:function next() { setCount(count + 1); } function previus() { setCount(count - 1); }
- تابع
next
مقدارcount
را یک واحد افزایش میدهد. - تابع
previus
مقدارcount
را یک واحد کاهش میدهد.
- تابع
بازگشت JSX:
return ( <div> <button onClick={next}>+</button> <span>{count}</span> <button onClick={previus}>-</button> </div> );
- این بخش JSX را بازمیگرداند که شامل یک دکمه برای افزایش شمارنده، یک عنصر
<span>
برای نمایش مقدارcount
و یک دکمه برای کاهش شمارنده است. - دکمهها با استفاده از ویژگی
onClick
به توابعnext
وprevius
متصل شدهاند.
- این بخش JSX را بازمیگرداند که شامل یک دکمه برای افزایش شمارنده، یک عنصر
این کامپوننت به شما اجازه میدهد تا با کلیک بر روی دکمهها، مقدار شمارنده را افزایش یا کاهش دهید و مقدار فعلی شمارنده را در صفحه نمایش دهید.
خروجی کد: