欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決VUE3 keep-alive頁面切換報錯parentComponent.ctx.deactivate

 更新時間:2023年10月11日 14:28:18   作者:程序Ms_Wqh  
這篇文章主要介紹了解決VUE3 keep-alive頁面切換報錯parentComponent.ctx.deactivate is not a function的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

vue3 keep-alive頁面切換報錯:parentComponent.ctx.deactivate is not a function

問題

我們使用判斷時  有時候會報錯

        <router-view v-slot="{ Component }">
          <keep-alive >
            <component :is="Component" v-if="$route.meta.keepAlive" />
          </keep-alive>
          <component :is="Component"  v-if="!$route.meta.keepAlive" />
        </router-view>
        //keepAlive是在路由里邊定義的meta字段 true/false

解決

這個時候我們只需在  <component> 標(biāo)簽上添加  :key=" 唯一值"  就可以解決了,只要是唯一的就可以沒有指定要求 推薦使用 $route.name

        <router-view v-slot="{ Component }">
          <keep-alive >
            <component :is="Component" :key="$route.name" v-if="$route.meta.keepAlive" />
          </keep-alive>
          <component :is="Component" :key="$route.name" v-if="!$route.meta.keepAlive" />
        </router-view>

vue頁面切換keep-alive導(dǎo)致的數(shù)據(jù)問題

問題描述

每個頁面通過computed和watch監(jiān)測vuex參數(shù),在參數(shù)變化時請求ajax更新數(shù)據(jù)。

在公共組件改變參數(shù)時,所有頁面都會去重新請求數(shù)據(jù),當(dāng)前頁面根據(jù)數(shù)據(jù)重新渲染,但切換回其他頁面時,由于keep-alive,頁面沒有變化。

//vuex  store.js
const state = {
	classes: "",
 	day: "",
}
const mutations = {
  updateClasses(state,payload) {
    state.classes=payload
  },
  updateDay(state,payload) {
    state.day=payload
  },
}
//vue  computed
 classes() {
  return this.$store.state.classes
 },
 day() {
   return this.$store.state.day
 },
 //vue  watch
classes(val) {
    this.updateClassChange()//ajax請求
},
day(val) {
    this.updateDayChange()//ajax請求
}
//公共組件
this.$store.commit('updateClasses', {this.classs})
this.$store.commit('updateDay', {this.day})

解決方法一

第一步:判斷此時路由是否是當(dāng)前頁面,避免多余的數(shù)據(jù)請求,只有當(dāng)前頁面重新請求數(shù)據(jù)

watch: {
  classes(val) {
    if(this.$route.name=="index") {
      this.updateClassChange()
    }
  },
  day(val) {
    if(this.$route.name=="index") {
      this.updateDayChange()
    }
  }
},

第二部:是用鉤子函數(shù)activated,每切換路由時重新加載,避免參數(shù)變化時頁面沒有變化

activated() {
 if(this.$route.name=="index"){
     this.init()
   }
 },

該方案問題:參數(shù)不變時,雖然不重新渲染,但每次切換路由也會重新請求

解決方法二

在vue為每一個頁面存儲一個公共組件參數(shù),使個頁面參數(shù)相互不干擾,keep-alive也不混亂

//vuex  store.js
const state = {
	classesObj:{
    index:"",
    addict:"",
    consume:"",
    mental:""
  },
  dayObj:{
    index:"",
    addict:"",
    consume:"",
    mental:""
  },
}
const mutations = {
 setClassesObj(state,payload){
    if(payload.index){
      state.classesObj.index=payload.index
    }
    if(payload.addict){
      state.classesObj.addict=payload.addict
    }
    if(payload.consume){
      state.classesObj.consume=payload.consume
    }
    if(payload.mental){
      state.classesObj.mental=payload.mental
    }
  },
  setDayObj(state,payload){
    if(payload.index){
      state.dayObj.index=payload.index
    }
    if(payload.addict){
      state.dayObj.addict=payload.addict
    }
    if(payload.consume){
      state.dayObj.consume=payload.consume
    }
    if(payload.mental){
      state.dayObj.mental=payload.mental
    }
  },
}
//vue  computed
classes() {
  return this.$store.state.classesObj[this.$route.name]
},
day() {
  return this.$store.state.dayObj[this.$route.name]
},
 //vue  watch
classes(val) {
    this.updateClassChange()//ajax請求
},
day(val) {
    this.updateDayChange()//ajax請求
}
//公共組件
this.$store.commit('setClassesObj', {[this.$route.name]:this.classs})
this.$store.commit('setDayObj', {[this.$route.name]:this.day})

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 100行代碼理解和分析vue2.0響應(yīng)式架構(gòu)

    100行代碼理解和分析vue2.0響應(yīng)式架構(gòu)

    通過100行代碼幫助大家理解和分析vue2.0響應(yīng)式架構(gòu)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • vue混入mixin流程與優(yōu)缺點詳解

    vue混入mixin流程與優(yōu)缺點詳解

    混入(mixin)提供了一種非常靈活的方式,來分發(fā)vue組件中的可復(fù)用功能。一個混入對象可以包含任意組件選項。當(dāng)組件使用混入對象時,所有混入對象的選項將被“混合”進入該組件本身的選項
    2022-09-09
  • vue3如何使用ref獲取元素

    vue3如何使用ref獲取元素

    這篇文章主要介紹了vue3如何使用ref獲取元素,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue小白入門教程

    vue小白入門教程

    vue是一套用于構(gòu)建用戶界面的漸進式框架,本文通過實例給大家介紹了vue入門教程適用小白初學(xué)者,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-04-04
  • Vue?使用?setup?語法糖的示例詳解

    Vue?使用?setup?語法糖的示例詳解

    在 setup 語法糖中通過 import 引入的內(nèi)容,也可以直接在 template 標(biāo)簽中使用,這篇文章主要介紹了Vue?使用?setup?語法糖,需要的朋友可以參考下
    2023-10-10
  • Vue中使用vee-validate表單驗證的方法

    Vue中使用vee-validate表單驗證的方法

    vee validate 一個輕量級的 vue表單驗證插件。接下來通過本文給大家分享Vue中使用vee-validate表單驗證的方法,需要的朋友參考下吧
    2018-05-05
  • 解決vue項目運行npm run serve報錯的問題

    解決vue項目運行npm run serve報錯的問題

    這篇文章主要介紹了解決vue項目運行npm run serve報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue中的MVVM模式使用及說明

    Vue中的MVVM模式使用及說明

    這篇文章主要介紹了Vue中的MVVM模式使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue+js點擊箭頭實現(xiàn)圖片切換

    vue+js點擊箭頭實現(xiàn)圖片切換

    這篇文章主要為大家詳細介紹了vue+js點擊箭頭實現(xiàn)圖片切換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • react里組件通信的幾種方式小結(jié)

    react里組件通信的幾種方式小結(jié)

    本文主要介紹了react里組件通信的幾種方式小結(jié),包含了5種方式,主要是props傳遞,回調(diào)函數(shù)作為props,Context,Redux或MobX,refs,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06

最新評論