Parastoo Ebrahimi
3 سال پیش توسط Parastoo Ebrahimi مطرح شد
4 پاسخ

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

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

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

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


ثبت پرسش جدید
کامران داور
تخصص : Front-end developer
@kamran.davar 3 سال پیش آپدیت شد
1

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
تخصص : front-end developer
@parastooebrahimi 3 سال پیش مطرح شد
0

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

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

کامران داور
تخصص : Front-end developer
@kamran.davar 3 سال پیش مطرح شد
1

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

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


مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 3 سال پیش مطرح شد
1

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

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

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

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

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


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

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