最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

// 動態(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')
      },
      ...
    ]
  }
]

二是動態(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 中使用并不會引發(fā)什么其他的問題,但是當(dāng)你將組件包裝成一個響應(yīng)式對象時(shí),在 vue3 中,會出現(xiàn)一個警告:

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

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

對于 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)
}])

對于動態(tài)路由的處理:

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • 由淺入深講解vue2和vue3的區(qū)別

    由淺入深講解vue2和vue3的區(qū)別

    最近發(fā)現(xiàn)很多要求Vue3的技術(shù)了,不得不說it技術(shù)的更新真的太快了,作為vue2老用戶,我們在學(xué)習(xí)Vue3前應(yīng)該了解他們的區(qū)別以及背后的原因,下面這篇文章主要給大家介紹了關(guān)于vue2和vue3區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • webpack配置導(dǎo)致字體圖標(biāo)無法顯示的解決方法

    webpack配置導(dǎo)致字體圖標(biāo)無法顯示的解決方法

    下面小編就為大家分享一篇webpack配置導(dǎo)致字體圖標(biāo)無法顯示的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解Vue-cli 創(chuàng)建的項(xiàng)目如何跨域請求

    詳解Vue-cli 創(chuàng)建的項(xiàng)目如何跨域請求

    本篇文章主要介紹了詳解Vue-cli 創(chuàng)建的項(xiàng)目如何跨域請求 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • vue自定義橫向滾動條css導(dǎo)航兩行排列布局實(shí)現(xiàn)示例

    vue自定義橫向滾動條css導(dǎo)航兩行排列布局實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了vue自定義橫向滾動條css導(dǎo)航兩行排列布局實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Vue編寫可顯示周和月模式的日歷 Vue自定義日歷內(nèi)容的顯示

    Vue編寫可顯示周和月模式的日歷 Vue自定義日歷內(nèi)容的顯示

    這篇文章主要為大家詳細(xì)介紹了Vue編寫可顯示周和月模式的日歷,Vue自定義日歷內(nèi)容的顯示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • vue3常用的API使用簡介

    vue3常用的API使用簡介

    這篇文章主要介紹了vue3常用的API使用簡介,幫助大家更好的理解和學(xué)習(xí)使用vue,感興趣的朋友可以了解下
    2021-03-03
  • vue.js?自定義指令(拖拽、拖動、移動)?指令?v-drag詳解

    vue.js?自定義指令(拖拽、拖動、移動)?指令?v-drag詳解

    這篇文章主要介紹了vue.js?自定義指令(拖拽、拖動、移動)?指令?v-drag,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • vue中使用protobuf的過程記錄

    vue中使用protobuf的過程記錄

    由于目前公司采用了ProtoBuf做前后端數(shù)據(jù)交互,進(jìn)公司以來一直用的是公司大神寫好的基礎(chǔ)庫,完全不了解底層是如何解析的。下面小編給大家分享vue中使用protobuf的過程記錄,需要的朋友參考下吧
    2018-10-10
  • 創(chuàng)建nuxt.js項(xiàng)目流程圖解

    創(chuàng)建nuxt.js項(xiàng)目流程圖解

    Nuxt.js是創(chuàng)建Universal Vue.js應(yīng)用程序的框架。它的主要范圍是UI渲染,同時(shí)抽象出客戶端/服務(wù)器分布。我們的目標(biāo)是創(chuàng)建一個足夠靈活的框架,以便您可以將其用作主項(xiàng)目庫或基于Node.js的當(dāng)前項(xiàng)目。
    2020-03-03
  • Vuex數(shù)據(jù)持久化實(shí)現(xiàn)的思路與代碼

    Vuex數(shù)據(jù)持久化實(shí)現(xiàn)的思路與代碼

    Vuex數(shù)據(jù)持久化可以很好的解決全局狀態(tài)管理,當(dāng)刷新后數(shù)據(jù)會消失,這是我們不愿意看到的。這篇文章主要給大家介紹了關(guān)于Vuex數(shù)據(jù)持久化實(shí)現(xiàn)的思路與代碼,需要的朋友可以參考下
    2021-05-05

最新評論

菏泽市| 盐源县| 双城市| 雅安市| 简阳市| 嫩江县| 武乡县| 合作市| 英山县| 岫岩| 七台河市| 抚顺县| 鄱阳县| 阜城县| 碌曲县| 日土县| 遂昌县| 临洮县| 宣化县| 宣恩县| 内黄县| 蒲城县| 剑川县| 舞钢市| 秭归县| 宣武区| 盘锦市| 黄石市| 兴海县| 大关县| 青浦区| 巴里| 高清| 古丈县| 喀什市| 永济市| 永清县| 神农架林区| 繁昌县| 那坡县| 宣城市|