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

مشکل با redux

سلام. من یه کامپوننت به اسم department دارم. داخل این کامپوننت یه کامپوننت دیگه به اسم storeZone وجود داره و برای انتقال اطلاعات در storeZone از redux استفاده کردم. داخل department یه تابع وجود داره که باید یکی از استیت های storeZone رو آپدیت کنه. این کار شدنیه ؟ با توجه به اینکه storeZone برای department , به عنوان child هست؟
تابعی که میخواد استیت رو در storeZone آپدیت کنه به صورت زیر هست:
zone,stores,storesData,zoneCheck همه از سمت storeZone هستن که صورت props استفاده شدن

 handleStoreandZoneLoading = (stores, scheduledTask) => {
        this.transformCronsExpressionToData(scheduledTask);
        let storeIDs = stores;
        let zoneCheck = [];
        let store = [];
        if (storeIDs) {
            this.props.zones.forEach(element => {
                element.zoneStores.forEach(item => {
                    if (storeIDs.some(x => x == item.id)) {
                        zoneCheck.push(item.id);
                        item.isChecked = true;
                    } else {
                        item.isChecked = false;
                    }
                });
            });
        }
        if (storeIDs) {
            this.props.storesData.forEach(item => {
                if (storeIDs.some(x => x == item.value)) {
                    store.push(item.value);
                    item.isChecked = true;
                } else {
                    item.isChecked = false;
                }
            });
        }
        this.props.dispatch(ZoneCheck(zoneCheck));
        this.props.dispatch(Stores(store));
    }

@mohsenbostan
@sinashahoveisi
@kamran.davar
@hesammousavi


ثبت پرسش جدید
کامران داور
تخصص : Front-end developer
@kamran.davar 4 سال پیش مطرح شد
0

سلام.
بله شدنیه و چیز عجیبی هم نیست.

این استیت storeZone در داخل خود کامپوننت storeZone تعریف شده یا توی استور ریداکس تعریف شده؟
اگر توی استور تعریف شده با دیسپچ کردن همین اکشن کریتورها استیت مورد نظرتون رو تغییر میدین و بعد ازون طریق connect کامپوننت storeZone رو به اون استیت متصل میکنید.


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

اون استیتی که گفتم توی استور هستش و باید از department اون رو آپدیت کرد. تست گرفتم همین چیزی که بالا توضیح دادم جواب نداد. الان متوجه شدم که مشکل از اینه که من یه سری API Fetch در داخل تابع compinentDidmount توی storeZone قرار دادم و این کامپوننت فقط وقتی فعال میشه که روی یک دکمه کلیک بشه و مودال اون بیاد بالا. برای همین جواب نمیداد. الان نمیدونم چه کنم تا وابستگی اجراشو به اجرا شدن مودال از بین ببرم
@kamran.davar


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

@kamran.davar
ببخشید یه سوال دیگه. من تا الان با ریداکس فقط داده ها رو آپدیت کردم و جا به جا کردم. میشه برای function هم این کار رو با ریداکس کرد؟


کامران داور
تخصص : Front-end developer
@kamran.davar 4 سال پیش آپدیت شد
0

ببینید شما استیت storeZone رو از هر کامپوننتی که میخواید تغییر میدید و در نتیجه استیت آپدیت شده. حالا هر وقتی کامپوننت storeZone مونت(mount) بشه میره ازون استیت اپدیت شده اطلاعاتشو برمیداره. و شما اگر از فانکشن connect طبق دستورالعملش درست استفاده کنید حتما با هر تغییر استیت در استور کامپوننتون ری رندر میشه. پس ممکنه کانکت رو درست ننوشته باشین.

شه برای function هم این کار رو با ریداکس کرد؟

آره کافیه توی paylod اکشن فانکشن بزارید.


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

@kamran.davar
میشه براش یه مثال بزنید. برای اینکه گفتین کافیه توی paylod اکشن فانکشن بزاریم تا بتونیم فانکشن رو هم مثل متغیر همه جا استفاده کنیم.


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

چیزی که مد نظر من بود این بود:

{
  type:"ACTION_NAME",
  payload:()=>{...}
}

اما این کار رو داکیومتیشن ریداکس توصیه نمیکنه: عنوان لینک مورد نظر


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

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