所有組件都會有ajax請求,現(xiàn)在切換的時候就會報錯,
查了下要卸載的時候取消請求,我現(xiàn)在都快搞完,1百個api,不得寫100遍?
封裝一個可以取消的api class
1.把所有的請求根據(jù)http方法封裝一次(get,post,put,delete)
2.
class ApiWithCancel {
get = (url, params) => {
//get為自己封裝的方法, 一下的post, put, del同理
return this.makeCancelAble(get(url, params));
}
post = (url, params) => {
return this.makeCancelAble(post(url, params));
}
put = (url, params) => {
return this.makeCancelAble(put(url, params));
}
delete = (url, params) => {
return this.makeCancelAble(fectchDel(url, params));
}
makeCancelAble = (promise) => {
return new Promise(( resolve ) =>
promise.then(val => !this.hasCanceled && resolve(val))
);
}
cancel = () => {
this.hasCanceled = true;
}
}
3.在用到的組件里的constructor里,new一個這個class實例
this.api = new ApiWithCancel();
4.用的時候
const res = await this.api.get(url,params);
5.在組件卸載的時候取消
this.api.cancel()
注:代碼可能不能直接用,因為里面有封裝的,但是意思是這個意思,封裝成一個class,每次new一下就可以了。另外數(shù)據(jù)放在redux里也可以避免這種報警,但是這前提是你的這些數(shù)據(jù)或者動作是應(yīng)該放在redux里的。
這個react官方已經(jīng)做了很詳細的討論了。 直接給你個代碼吧。
如果想知道來龍去脈, 戳這里 https://reactjs.org/blog/2015...
const makeCancelable = (promise) => {
let hasCanceled_ = false;
const wrappedPromise = new Promise((resolve, reject) => {
promise.then(
val => hasCanceled_ ? reject({isCanceled: true}) : resolve(val),
error => hasCanceled_ ? reject({isCanceled: true}) : reject(error)
);
});
return {
promise: wrappedPromise,
cancel() {
hasCanceled_ = true;
},
};
};
st cancelablePromise = makeCancelable(
new Promise(r => component.setState({...}))
);
cancelablePromise
.promise
.then(() => console.log('resolved'))
.catch((reason) => console.log('isCanceled', reason.isCanceled));
cancelablePromise.cancel(); // Cancel the promise
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務(wù)外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。