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

Vue動(dòng)態(tài)組件實(shí)現(xiàn)異常處理方法

 更新時(shí)間:2023年02月01日 08:32:07   作者:憂郁的蛋~  
Vue3動(dòng)態(tài)組件怎么進(jìn)行異常處理?下面本篇文章帶大家聊聊Vue3 動(dòng)態(tài)組件異常處理的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

動(dòng)態(tài)組件有兩種常用場景:

一是動(dòng)態(tài)路由:

// 動(dòng)態(tài)路由
export const asyncRouterMap: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'index',
    meta: { title: '首頁' },
    component: BasicLayout, // 引用了 BasicLayout 組件
    redirect: '/welcome',
    children: [
      {
        path: 'welcome',
        name: 'Welcome',
        meta: { title: '引導(dǎo)頁' },
        component: () => import('@/views/welcome.vue')
      },
      ...
    ]
  }
]

二是動(dòng)態(tài)渲染組件,比如在 Tabs 中切換:

<el-tabs :model-value="copyTabName" type="card">
  <template v-for="item in tabList" :key="item.key || item.name">
    <el-tab-pane
      :name="item.key"
      :label="item.name"
      :disabled="item.disabled"
      :lazy="item.lazy || true"
    >
      <template #label>
        <span>
          <component v-if="item.icon" :is="item.icon" />
          {{ item.name }}
        </span>
      </template>
      // 關(guān)鍵在這里
      <component :key="item.key || item.name" :is="item.component" v-bind="item.props" />
    </el-tab-pane>
  </template>
</el-tabs>

在 vue2 中使用并不會(huì)引發(fā)什么其他的問題,但是當(dāng)你將組件包裝成一個(gè)響應(yīng)式對(duì)象時(shí),在 vue3 中,會(huì)出現(xiàn)一個(gè)警告:

Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with markRaw or using shallowRef instead of ref.

出現(xiàn)這個(gè)警告是因?yàn)椋菏褂?reactive 或 ref(在 data 函數(shù)中聲明也是一樣的)聲明變量會(huì)做 proxy 代理,而我們組件代理之后并沒有其他用處,為了節(jié)省性能開銷,vue 推薦我們使用 shallowRef 或者 markRaw 跳過 proxy 代理。

解決方法如上所說,需要使用 shallowRef 或 markRaw 進(jìn)行處理:

對(duì)于 Tabs 的處理:

import { markRaw, ref } from 'vue'
import A from './components/A.vue'
import B from './components/B.vue'
interface ComponentList {
  name: string
  component: Component
  // ...
}
const tab = ref<ComponentList[]>([{
    name: "組件 A",
    component: markRaw(A)
}, {
    name: "組件 B",
    component: markRaw(B)
}])

對(duì)于動(dòng)態(tài)路由的處理:

import { markRaw } from 'vue'
// 動(dòng)態(tài)路由
export const asyncRouterMap: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'home',
    meta: { title: '首頁' },
    component: markRaw(BasicLayout), // 使用 markRaw
    // ...
  }
]

而對(duì)于 shallowRef 和 markRaw,2 者的區(qū)別在于 shallowRef 只會(huì)對(duì) value 的修改做出反應(yīng),比如:

const state = shallowRef({ count: 1 })
// 不會(huì)觸發(fā)更改
state.value.count = 2
// 會(huì)觸發(fā)更改
state.value = { count: 2 }

而 markRaw,是將一個(gè)對(duì)象標(biāo)記為不可被轉(zhuǎn)為代理。然后返回該對(duì)象本身。

const foo = markRaw({})
console.log(isReactive(reactive(foo))) // false
// 也適用于嵌套在其他響應(yīng)性對(duì)象
const bar = reactive({ foo })
console.log(isReactive(bar.foo)) // false

可看到,被 markRaw 處理過的對(duì)象已經(jīng)不是一個(gè)響應(yīng)式對(duì)象了。

對(duì)于一個(gè)組件來說,它不應(yīng)該是一個(gè)響應(yīng)式對(duì)象,在處理時(shí),shallowRef 和 markRaw 2 個(gè) API,推薦使用 markRaw 進(jìn)行處理。

以上就是淺析Vue3動(dòng)態(tài)組件怎么進(jìn)行異常處理的詳細(xì)內(nèi)容,有不當(dāng)?shù)牡胤竭€請(qǐng)大家多多指教

到此這篇關(guān)于Vue動(dòng)態(tài)組件實(shí)現(xiàn)異常處理方法的文章就介紹到這了,更多相關(guān)Vue動(dòng)態(tài)組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決vue中reader.onload讀取文件的異步問題

    解決vue中reader.onload讀取文件的異步問題

    這篇文章主要介紹了解決vue中reader.onload讀取文件的異步問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue實(shí)現(xiàn)直播間點(diǎn)贊飄心效果的示例代碼

    vue實(shí)現(xiàn)直播間點(diǎn)贊飄心效果的示例代碼

    這篇文章主要介紹了vue實(shí)現(xiàn)直播間點(diǎn)贊飄心效果的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue?如何根據(jù)條件判斷屬性的添加和去除

    vue?如何根據(jù)條件判斷屬性的添加和去除

    這篇文章主要介紹了vue?如何根據(jù)條件判斷屬性的添加和去除,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • vue中使用svg-icon遇到的坑及解決

    vue中使用svg-icon遇到的坑及解決

    這篇文章主要介紹了vue中使用svg-icon遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 教你使用vue-autofit 一行代碼搞定自適應(yīng)可視化大屏

    教你使用vue-autofit 一行代碼搞定自適應(yīng)可視化大屏

    這篇文章主要為大家介紹了使用vue-autofit 一行代碼搞定自適應(yīng)可視化大屏教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • VUE render函數(shù)使用和詳解

    VUE render函數(shù)使用和詳解

    這篇文章主要為大家介紹了VUE render函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 淺談vue權(quán)限管理實(shí)現(xiàn)及流程

    淺談vue權(quán)限管理實(shí)現(xiàn)及流程

    這篇文章主要介紹了淺談vue權(quán)限管理實(shí)現(xiàn)及流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Vue3?源碼解讀之副作用函數(shù)與依賴收集

    Vue3?源碼解讀之副作用函數(shù)與依賴收集

    本文深入分析了副作用的實(shí)現(xiàn)以及執(zhí)行時(shí)機(jī),并詳細(xì)分析了用于存儲(chǔ)副作用函數(shù)的targetMap的數(shù)據(jù)結(jié)構(gòu)及其實(shí)現(xiàn)原理,還深入分析了依賴收集track函數(shù)以及派發(fā)更新 trigger 函數(shù)的實(shí)現(xiàn),需要的朋友可以參考下
    2022-08-08
  • 使用VUE+iView+.Net Core上傳圖片的方法示例

    使用VUE+iView+.Net Core上傳圖片的方法示例

    這篇文章主要介紹了使用VUE+iView+.Net Core上傳圖片的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Vue首頁界面加載優(yōu)化實(shí)現(xiàn)方法詳解

    Vue首頁界面加載優(yōu)化實(shí)現(xiàn)方法詳解

    如果你也遇到在 vue 應(yīng)用中,首頁加載資源過多,導(dǎo)致加載緩慢的問題,下面的方法也許能幫到你,主要的處理思想是:讓首頁多余的資源能在需要它的時(shí)候再加載
    2022-09-09

最新評(píng)論