我們經常會遇到當前頁面未加載完畢時跳轉路由或者返回操作, 但是通過network會發現, 若網絡環境較差的情況下, 會一直pending, 切換路由后在network中添加新的請求但是正在pending的請求依然存在. 當我們在項目中做了一個上拉加載分頁的時候會一直加載中, 用戶等待不耐煩后可能會主動觸發返回操作, 但是此刻即使用戶觸發返回操作, 加載分頁的請求還是存在, 頁面還是會一直提示加載中, 直到該請求加載成功或超時才肯罷休。最終給用戶造成一些不必要的結果,同時也對web性能造成一定的影響。
那么如何解決這個問題呢,方法就是監聽路由,在路由切換前將上個頁面的請求取消。
第一步:
axios請求頭設置
import axios from 'axios' import { store } from './store' // 引入vuex axios.interceptors.request.use( config => { config.cancelToken = new axios.CancelToken(function (cancel) { store.commit('pushToken', {cancelToken: cancel}) }) return config } )
第二步:
利用vuex,新建一個store.js,將取消方法cancel
放到數組中,然后在路由守衛中把數組中存有的cancel
方法都執行
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export const store = new Vuex.Store({ state: { cancelTokenArr: [] // 取消請求token數組 }, mutations: { pushToken (state, payload) { state.cancelTokenArr.push(payload.cancelToken) }, clearToken ({ cancelTokenArr }) { cancelTokenArr.forEach(item => { item('路由跳轉取消請求') }) cancelTokenArr = [] } } })
第三步:
監聽路由
router.beforeEach(function (to, from, next) { store.commit('clearToken') // 取消請求 next() })
到此就可以解決路由跳轉后上個頁面的請求還在pending的狀態啦
如果有問題,可以聯系我:
QQ:412606846(微信同號)