سلام. من برای اینکه هر دفعه کاربر عکسی رو از سلکت لیست انتخاب کنه و نمایش داده بشه از 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 }))
});
}
}
componentDidUpdate گزینه خوبی برای درخواست http و تغییر state نیست چون هربار که کامپونتت آپدیت بشه اون متد اجرا بشه حالا که شما اومدید با این کارتون کلا بردین اینو در یک حلقه نامحدود که هی تکرار میشه
@hesammousavi
پس از چی استفاده کنم به جای اون؟ میخوام با آپدیت شدن state لینک رو get کنم و نمایش بدم عکس رو...و در لود اول صفحه هم باید یه عکس باشه..
@hesammousavi
@mohsenbostan
بله همین کارو کرده بودم. ولی دیدم وقتی میخوام از استیتی که توی لینک عکس هست استفاده کنم اون استیت مقداری نداره. برای همین انتقالش دادم به ComponentDidupdate تا اول مقدارشو بگیره بعد استفاده بشه...
من با روندتون آشنا نیستم الان دقیقا سیستم چطوریه . کامپونتت پدر داستانش چیه این کامپونتت داستانش چیه !
@hesammousavi
@mohsenbostan
من عکس فرم رو آپلود کردم : http://uupload.ir/files/l9v6_form.jpg
وقتی صفحه لود میشه اطلاعات کاربر که توی فرم هم معلومه همه باید نمایش داده بشن. که همه رو توی componentDidMount قرار دادم. حالا هر سری که کاربر یه عکس رو از داخل اون سلکت لیست که با قرمز مشخص کردم انتخاب بکنه باید اونو توی تگ ایمیج نمایش بده. که اون چیزی که انتخاب میکنه رو میریزم توی استیت HeaderImage و بعد توی ComponentDidUpdate کالش میکنم و اگه مقدارش عوض شده باشه مجددا با get عکس جدید رو بگیره...
@parastooebrahimi
هر بار اون select باکس تغییر میکنه درخواست ajax خودتون رو میتونید در listener مروبوط به change ارسال کنید عکس جدید دریافت شد url رو در state تغییر بدید همین .
کلا در ComponentDidUpdate کار اشتباهی هست .
یه نکته لطفا اگر عکس دارید با ویرایشگر ما میتونید آپلود کنید دیگه نیاز نیست از جای دیگه آپلود کنید و لینک قرار بدید
@parastooebrahimi
به نظرم می تونید کلا لینک همه عکس ها رو اول در یک متغیر ذخیره کنید و بعد از اون موارد رو بگیرید. فکر کنم بهتر باشه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟