如果在 vue 組件的 beforeRouteEnter 鉤子函數(shù)中調(diào)用 API 請(qǐng)求,會(huì)出現(xiàn)循環(huán)執(zhí)行的問題:
成都創(chuàng)新互聯(lián)是一家專業(yè)提供玉龍企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、做網(wǎng)站、html5、小程序制作等業(yè)務(wù)。10年已為玉龍眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
beforeRouteEnter(to, from, next) { login().then(() => { next({ name: 'home' }); }).catch(() => { next(); }); },
上面的代碼會(huì)出現(xiàn)無限循環(huán)調(diào)用的問題,可能是API還沒有請(qǐng)求完成,又一次進(jìn)入 router,調(diào)用了 beforRouterEnter 的原因,解決辦法加一個(gè)變量,在調(diào)用API之前判斷一下:
let request = false; beforeRouteEnter(to, from, next) { if (request) { next(); return; } request = true; login().then(() => { next({ name: 'home' }); }); },
ps:關(guān)于vue中beforeRouteEnter使用的誤區(qū)
在寫項(xiàng)目的時(shí)候偶然遇到了一個(gè)問題,在進(jìn)入一個(gè)城市選擇頁面時(shí),城市列表總是需要一秒后才能加載出來,出現(xiàn)了頁面抖動(dòng),在解決這個(gè)問題時(shí)想到了路由中的beforeRouteEnter
方法,在路由跳轉(zhuǎn)前加載數(shù)據(jù),在網(wǎng)上發(fā)現(xiàn)有博客說可以使用如下寫法來解決這個(gè)問題:
這樣寫是毫無效果的, 經(jīng)過仔細(xì)分析官方文檔后發(fā)現(xiàn)next中的函數(shù)執(zhí)行在頁面mounted之后,所以這種方法時(shí)是不正確的。還不如直接將數(shù)據(jù)獲取綁定到create鉤子上。
正確寫法如下:
這樣就在跳轉(zhuǎn)前獲取到了數(shù)據(jù),改寫后完全解決了頁面抖動(dòng)的問題。
總結(jié)
以上所述是小編給大家介紹的vue 中 beforeRouteEnter 死循環(huán)的問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!