react

state ها در ری اکت

سلام به همه ی دوستان, امیدوارم هرجا هستید عالی باشید.

میخاییم توی این مقاله 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 (
            <h3 className="timer"><span class="ez-toc-section" id="time_is_thisstatetime"></span>time is: {this.state.time}<span class="ez-toc-section-end"></span></h3>
        )
    }
}
				
			

در کد بالا ما اومدیم یک کامپوننت کلاسی تعریف کردیم

  1. تعریف کلاس و سازنده (Constructor):.

    • کلاس به نام Timer تعریف شده که از React.Component ارث‌بری می‌کند.
    • در سازنده (constructor)، super() فراخوانی می‌شود تا سازنده کلاس والد (React.Component) نیز فراخوانی شود.
    • this.state تنظیم می‌شود تا شامل یک ویژگی time باشد که زمان فعلی را به صورت رشته‌ای ذخیره می‌کند.
  2. متد render:

    • متد render مسئول رندر کردن JSX است که در اینجا یک عنصر <h3> با کلاس timer و متن “time is: {this.state.time}” است.
    • setInterval درون render قرار دارد که هر ثانیه (1000 میلی‌ثانیه) یکبار فراخوانی می‌شود.
    • در هر فراخوانی setInterval، متد this.setState فراخوانی می‌شود تا ویژگی time در state به زمان فعلی به‌روزرسانی شود.
  3. خروجی را در عکس زیر ببینید:

    • این کامپوننت هر ثانیه به‌روزرسانی می‌شود و زمان فعلی را درون عنصر <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(
        <div className="counter">
            <button onClick={next} className="counter_btn">+</button>
            <span>{count}</span>
            <button onClick={previus} disabled={count<=0} className="counter_btn">-</button>
        </div>
    )

}
				
			

این کد یک کامپوننت تابعی React به نام Counter را تعریف می‌کند که یک شمارنده ساده را پیاده‌سازی می‌کند. بیایید قدم به قدم آن را بررسی کنیم:

  1. تعریف کامپوننت و استفاده از useState:

    const Counter = () => {
        const [count, setCount] = useState(0);
    
    • اینجا یک کامپوننت تابعی به نام Counter تعریف شده است.
    • از هوک useState برای مدیریت حالت (state) استفاده شده است. count مقدار شمارنده را نگه می‌دارد و setCount تابعی است که برای به‌روزرسانی count استفاده می‌شود. مقدار اولیه count برابر با 0 است.
  2. تعریف توابع next و previus:

    function next() {
        setCount(count + 1);
    }
    function previus() {
        setCount(count - 1);
    }
    
    • تابع next مقدار count را یک واحد افزایش می‌دهد.
    • تابع previus مقدار count را یک واحد کاهش می‌دهد.
  3. بازگشت JSX:

    return (
        <div>
            <button onClick={next}>+</button>
            <span>{count}</span>
            <button onClick={previus}>-</button>
        </div>
    );
    
    • این بخش JSX را بازمی‌گرداند که شامل یک دکمه برای افزایش شمارنده، یک عنصر <span> برای نمایش مقدار count و یک دکمه برای کاهش شمارنده است.
    • دکمه‌ها با استفاده از ویژگی onClick به توابع next و previus متصل شده‌اند.

این کامپوننت به شما اجازه می‌دهد تا با کلیک بر روی دکمه‌ها، مقدار شمارنده را افزایش یا کاهش دهید و مقدار فعلی شمارنده را در صفحه نمایش دهید.

خروجی کد:

محمد صفرپور

علاقمند به دنیای برنامه نویسی مخصوصا فرانت اند😍

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا