یلدا ادامه داره... ❤️ ۴۰ درصد تخفیف همه دوره‌ها

استفاده از تخفیف‌ها
ثانیه
دقیقه
ساعت
روز
علیرضا امیری
4 سال پیش توسط علیرضا امیری مطرح شد
2 پاسخ

مشکل set state در ریکت

سلام
من یه handler دارم که یه state رو set میکنه..با اولین action اطلاعات قبلی رو برگشت داده میشه و همون دفعه اول ست نمیشه
من میدونم با استفاده از useEffect میتونم به اون مقدار جدید دسترسی داشته باشم اما میخام ببینم دلیل این چی هستش و راه دیگه ای داره؟


    const handler_data = ( )=> {

        setState(prevState =>({...prevState , newData: true}) )
        console.log(state ) // return prev data

    }

ثبت پرسش جدید
فریبرز شالقونی پور
تخصص : طراح و برنامه نویس حوضه وب
@fariborz0015 4 سال پیش آپدیت شد
0

سلاممم آآآآآ نمیدونم سوالتو درست متوجه شدم یا ن ولی چیزی ک متوجه شدم انگار اینه که بعد اینکه ست استیت انجام شد تو کنسول چرا مقدار ست شده برگشت داده نمیشه ؟ فرضن اگر newData برابر False باشه و تو این handler بیای و ست کنی و برابر true قرارش بدی تو کنسول چرا مقدار قبلی رو نمایش میده

خوب این داستان بر میگرده به رندر React چون وقتی شما اومدی و یه استیت رو تو یه arrow function ست کردی هنوز state ها دست نخورده هستن بلکه بعد تموم شدن اکشن state ها ست میشن و در رندر بعدی console اون مقدار تغییر داده شده رو نماشی میده (البته اگه این هندلر دوباره اجرا بشه )یجورایی میشه گفت setstate غیر همزمان میشه ! اگر کنسول رو بیرون فانکشن بزاری میبینی که با اجرای هندلر همزمان مقادیر به شکل جدید ترین تغییرات نمایش داده میشه !!

البته اگ از context یا redux استفاده کنی ممکنه درست بشه !! بهتره که اگر هندلر وابسته به مقدار اون استیت داری بیرون از اون تابع فراخوانی کنی

امید وارم تونسته باشم حق مطلب و ادا کنم ، اگر مشکلی داشتی کد کاملتری بزار که بتونیم کمکت کنیم


فرزاد زارع
تخصص : برنامه نویسی موبایل
@farzad.zare1992 4 سال پیش مطرح شد
0

دوست عزیز سلام

چون دستور setState یه فانکشن زمان بر است و به صورت async اجرا می شود مقدار state در کنسول نمایش داده نمی شود و باید از callback استفاده کنید:

const handler_data = ()=> {

        setState(prevState => ({...prevState , newData: true}) , () => {
            console.log(this.state); // return new data
        });

    }

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

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