راکت

prevState در کامپوننت های فانکشنی

4 پاسخ

سلام توی کلاس بیس کامپوننت ها برای دسترسی به prev state به این صورت عمل میکردم:

     this.setState(prevState => {
                return {
                    aisle: [...prevState.aisle, ...aisles]
                }
            })

حالا توی فانکشنال کامپوننت برای دسترسی به اون باید چه کنم؟
@MehdiAghighi
@hesammousavi
@kamran.davar

ثبت پرسش جدید

پاسخ‌ها

4
کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

Functional updates
If the new state is computed using the previous state, you can pass a function to setState. The function will receive the previous value, and return an updated value. Here’s an example of a counter component that uses both forms of setState:

function Counter({initialCount}) {
  const [count, setCount] = useState(initialCount);
  return (
    <>
      Count: {count}
      <button onClick={() => setCount(initialCount)}>Reset</button>
      <button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
      <button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
    </>
  );
}

https://reactjs.org/docs/hooks-reference.html#usestate

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@kamran.davar توی مثال بالا prevState برای count رو بر میگردونه. من میخوام مثل کامپوننت های کلاسی وقتی prevState رو مینویسی بعدش با دات مشخص بکنی کدوم استیت. مثل این

  this.setState(prevState => {
                return {
                    aisle: [...prevState.aisle, ...aisles]
                }
            })

شاید پاسخ شما همین‌جا باشد

کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

یک فرق اساسی بین استیت در کلاس کمپوننت و فاننشن کامپوننت هست.
اونم اینک در فانکشن کامپوننت ها یک استیت چند قسمتی نداریم. به جاش برای هر قسمت یک استیت داریم و یک متد ست استیت.
سبک و سیاق برنامه نویسی ما هم با در نظر گرفتن این تفاوت باید عوض بشه.

به هر حال اگه به هر دلیلی دوس دارین شبیه کلاس کامپوننت ها کد نویسی کنیددستتون بازه. میتونید استیتتون رو یک آبجکت بزرگ در نظر بگیرید و دقیقا همون کارایی که تو کلاس کاپوننت ها با استیت میکریدین اینجا هم بکنید.

مهدی عقیقی
مهدی عقیقی
@MehdiAghighi

تخصص: برنامه نویس وب

@parastooebrahimi باید همون کاری رو بکنید که اینجا گفتم:

const [state, setState] = useState({})

یعنی در واقع باید یک آبجکت درست کنید چون توی فانکشنال کامپوننت ها state شما یک آبجکت کلی نیست پس باید یک استیت درست کنید که داخل اون یک آبجکت باشه با مقادیر مورد نظر.
حالا مثل زیر:

  setState(prevState => {
                return {
                    aisle: [...prevState.aisle, ...aisles]
                }
            })

فکر می کنم همین بهترین راهه.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام