راکت

ارسال اطلاعات فقط در صورتی که آپدیت شده باشن

4 پاسخ

سلام. من یه فرمی دارم و میخوام دکمه send اول فعال باشه. بعد که کاربر اطلاعات رو ارسال کرد غیر فعال بشه و در صورتی فعال بشه که حداقل یکی از اطلاعاتشو تغییر داده باشه. چه باید بکنم برای این کار. اطلاعات با زدن دکمه ارسال generate میشن به صورت زیر :
@kamran.davar
@hesammousavi
@sinashahoveisi

 const handleGenerateCampaign = () => {
        setLoading(true);
        let stores = props.stores.concat(props.zoneCheck);
        let toJS = {
            parameters: [
                { key: 'storeIDs', value: stores ? stores.join(',') : '' },
                { key: 'periodDescription', value: props.periodDescription },
                { key: 'dayOfWeek', value: 1 },
                { key: 'startDate', value: props.startDate },
                { key: 'endDate', value: props.endDate },
                { key: 'dateRangeDescription', value: props.dateRangeDescription },
                { key: 'departmentCode', value: props.departmentCode },
                { key: 'spentAmount', value: props.spentAmount },
                { key: 'frequencyType', value: props.frequencyType },
                { key: 'frequencyPeriod', value: props.frequencyPeriod },
                { key: 'enforcePartPeriod', value: props.enforcePartPeriod },
                { key: 'sortOrder', value: props.sortOrder },
                { key: 'orderBy', value: props.orderBy },
            ],
        }
        axios.post(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}api/campaign/report/${props.handleReportTemplate()}`, toJS.parameters).then((response) => {
            console.log("generaate campaign result", response.data);
            setCampaignIdentifier(response.data);
            setLoading(false);
        });
    }
ثبت پرسش جدید

پاسخ‌ها

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

تخصص: Front-end developer

قاعدتا باید اطلاعات فعلی فرم رو با اطلاعاتی که از بک اند گرفته شده مقایسه کنید و در صورتی که جواب مقایسه false بود دکمه فعال بشه و برعکس.

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

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

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

Mohammad reza Golshahi
Mohammad reza Golshahi
@golshahimohammadreza

تخصص: Go - Python

با سلام دوست عزیز
@parastooebrahimi

برای بررسی این موضوع باید از متد watch استفاده کنی یک نمونه به طول مثال :

 var vm = new Vue({
            data: {
                a: 1,
                b: 2,
                c: 3,
                d: 4,
                e: {
                    f: {
                        g: 5
                    }
                }
            },
            watch: {
                a: {
                    handler: function (val, oldVal) { /* ... */ },
                    deep: true
                },

                d: {
                    handler: 'someMethod',
                    immediate: true
                },

                'e.f': function (val, oldVal) { /* ... */ }

            }
        });
Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@golshahimohammadreza
ممنونم از کمکتون. حلش کردم ولی نه با watch که گقتین. هر بار که برای آخرین بار آرایه تغییر میکنه اون رو توی یه متغیر توی استیت ذخیره کردم و اون رو و مقدار جدید رو به Json.stringift تبدیل کردم و بعد مقایسشون میکنم که اگر مثل هم بودن دکمه ارسال رو غیر فعال میکنم. به صورت زیر:

const GenerateCampaign = (props) => {
    const [campaignIdentifier, setCampaignIdentifier] = useState(null);
    const [loading, setLoading] = useState(false);
    const [baseJS, setBaseJS] = useState([]);
    const handleGenerateCampaign = () => {
        setLoading(true);
        axios.post(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}api/campaign/report/${props.handleReportTemplate()}`, props.toJS).then((response) => {
            console.log("generaate campaign result", response.data);
            setCampaignIdentifier(response.data);
            setLoading(false);
        });
        setBaseJS(props.toJS);
    }
    return (
        <React.Fragment>
            <div className="pt-5">
                <button 
                disabled={JSON.stringify(baseJS)=== JSON.stringify(props.toJS) ? true : false} 
                onClick={() => handleGenerateCampaign()} className="btn btn-lg btn-info btn-block"><i className={loading ? "fa fa-sync fa-spin" : "fas fa-calendar-alt"} ></i> Create Campaign</button>
                {
                    campaignIdentifier !== null ?
                        <button 
                        onClick={() => {
                            window.open(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}#campaigns/campaign/${campaignIdentifier}`)
                        }} className="btn btn-outline-info btn-block"><i className="fa fa-link"></i> Campaign</button>
                        : null
                }
            </div>
        </React.Fragment>
    )

};

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

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