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

اشکال در componentDidUpdate

سلام. من برای اینکه هر دفعه کاربر عکسی رو از سلکت لیست انتخاب کنه و نمایش داده بشه از componentDidUpdate استفاده کردم. الان وقتی که کاربر یه عکس جدید انتخاب کنه بین عکس جدید و قدیم همینجور پرش داره.. باز ثابت میشه باز پرش داره.. چه کاری انجام بدم تا این مشکل برطرف بشه ؟

componentDidUpdate(prevState){

            if(this.state.AccountHeader !== prevState.AccountHeader){
                let u= this.state.AccountHeader
            console.log("u is : " + this.state.AccountHeader)

               axios.get(`http://localhost:21455/api/image/${this.state.AccountHeader}` 

               , { responseType: 'arraybuffer' })
                 .then((response) => {
                   console.log("u is : " + this.state.ABN)

                   let image = btoa(
                     new Uint8Array(response.data)
                       .reduce((data, byte) => data + String.fromCharCode(byte), '')
                   );
                   let imageType = "";
                   const contentType = response.headers['content-type'].toLowerCase();
                   for(let item of contentType.split(',')){
                   if(item.indexOf("image") >= 0){
                       imageType = item;
                       break;
                      }
                   }
                   const data= `data:${imageType};base64,${image}`
                   this.setState(state => ({ imageUrl:data  }))

                 });
            }

    }

@ali.bayat
@mohsenbostan


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

componentDidUpdate گزینه خوبی برای درخواست http و تغییر state نیست چون هربار که کامپونتت آپدیت بشه اون متد اجرا بشه حالا که شما اومدید با این کارتون کلا بردین اینو در یک حلقه نامحدود که هی تکرار میشه


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

@hesammousavi
پس از چی استفاده کنم به جای اون؟ میخوام با آپدیت شدن state لینک رو get کنم و نمایش بدم عکس رو...و در لود اول صفحه هم باید یه عکس باشه..


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
0

@parastooebrahimi
سلام.
توی componentDidMount قرار بدید.


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

@hesammousavi
@mohsenbostan
بله همین کارو کرده بودم. ولی دیدم وقتی میخوام از استیتی که توی لینک عکس هست استفاده کنم اون استیت مقداری نداره. برای همین انتقالش دادم به ComponentDidupdate تا اول مقدارشو بگیره بعد استفاده بشه...


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

من با روندتون آشنا نیستم الان دقیقا سیستم چطوریه . کامپونتت پدر داستانش چیه این کامپونتت داستانش چیه !


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

@hesammousavi
@mohsenbostan
من عکس فرم رو آپلود کردم : http://uupload.ir/files/l9v6_form.jpg
وقتی صفحه لود میشه اطلاعات کاربر که توی فرم هم معلومه همه باید نمایش داده بشن. که همه رو توی componentDidMount قرار دادم. حالا هر سری که کاربر یه عکس رو از داخل اون سلکت لیست که با قرمز مشخص کردم انتخاب بکنه باید اونو توی تگ ایمیج نمایش بده. که اون چیزی که انتخاب میکنه رو میریزم توی استیت HeaderImage و بعد توی ComponentDidUpdate کالش میکنم و اگه مقدارش عوض شده باشه مجددا با get عکس جدید رو بگیره...


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش آپدیت شد
0

@parastooebrahimi
هر بار اون select باکس تغییر میکنه درخواست ajax خودتون رو میتونید در listener مروبوط به change ارسال کنید عکس جدید دریافت شد url رو در state تغییر بدید همین .
کلا در ComponentDidUpdate کار اشتباهی هست .
یه نکته لطفا اگر عکس دارید با ویرایشگر ما میتونید آپلود کنید دیگه نیاز نیست از جای دیگه آپلود کنید و لینک قرار بدید


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
0

@parastooebrahimi
به نظرم می تونید کلا لینک همه عکس ها رو اول در یک متغیر ذخیره کنید و بعد از اون موارد رو بگیرید. فکر کنم بهتر باشه.


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

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