راکت

مشکل با redux

6 پاسخ

سلام. من یه کامپوننت به اسم 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

ثبت پرسش جدید

پاسخ‌ها

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

تخصص: Front-end developer

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

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

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

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

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

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

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

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

تخصص: Front-end developer

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

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

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

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

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

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

تخصص: Front-end developer

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

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

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

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

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