如何解決Vue3組合式API模式下動態(tài)組件不渲染問題
Vue3可以使用component組件渲染動態(tài)組件,將子組件名傳遞給:is指令就可以了。
官方在文檔中指出,傳遞到:is指令的值可以是:
(1)被注冊的組件名
(2)導(dǎo)入的組件對象
假設(shè)有以下需求,有以下兩個子組件,在父組件中需要根據(jù)其他條件動態(tài)加載:
<template> <h3>我是動態(tài)子組件A</h3> </template> <style scoped> h3 { background-color: blue; color: #fff; } </style>
<template> <h3>我是動態(tài)子組件B</h3> </template> <style scoped> h3 { background-color: blueviolet; color: #fff; } </style>
1. 將動態(tài)組件對象直接賦值給:is
在Vue3組合式API模式下,用component組件渲染動態(tài)組件,如果將動態(tài)組件對象直接賦值給:is指令是沒有問題的。
例如以下代碼:
模板代碼
<template> <div> <h3>組合API模式下動態(tài)組件的加載</h3> <component :is="CompA" /> <component :is="CompB" /> </div> </template> <script setup lang="ts"> import CompA from "./CompA.vue"; </script>
TS代碼
<script lang="ts" setup> <script setup lang="ts"> import CompA from "./CompA.vue"; import CompB from "./CompB.vue"; </script> </script>
效果如下,是沒有問題的:
2. 通過動態(tài)組件名的方式賦值給:is無法實(shí)現(xiàn)
假若需要根據(jù)不同情況賦予:is指令不同的子組件,那么就需要用一個變量來存子組件名稱。
在組合api模式下,子組件是無法渲染的。
因?yàn)閏omponent組件的:is指令需要已注冊的組件對象。
請看如下代碼:
<template> <div> <h3>組合API模式下使用動態(tài)組件名加載子組件</h3> <template v-for="comp in compArr" :key="comp.compName"> <component :is="comp.compName" /> </template> </div> </template>
<script setup lang="ts"> import CompA from "./CompA.vue"; import CompB from "./CompB.vue"; const compArr = [{ compName: "CompA" }, { compName: "CompB" }]; </script>
以上代碼會引起錯誤提示:兩個導(dǎo)入的子組件未使用:
而且在組合式API模式下,是不能顯式注冊子組件的,兩個子組件也并沒有按我們的預(yù)期渲染出來:
如何解決這個問題呢?
3. 使用組合式和選項(xiàng)式API結(jié)合的方式解決這個問題
在組合式API模式下,Vue是支持多個Script代碼塊的。
由于選項(xiàng)式API可以顯式注冊導(dǎo)入的子組件,可以另外寫一個選項(xiàng)式API模式的script來顯式注冊子組件。
這樣在component組件中,傳入已注冊子組件的名稱即可。
代碼如下:
// 專門定義一個選項(xiàng)式api模塊,來注冊組件 <script lang="ts"> import { defineComponent } from "vue"; import CompA from "./CompA.vue"; import CompB from "./CompB.vue"; export default defineComponent({ components: { CompA, CompB } }); </script> <script setup lang="ts"> const compArr = [{ compName: "CompA" }, { compName: "CompB" }]; </script>
兩個子組件已經(jīng)成功渲染了。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue-cli單頁面預(yù)渲染seo-prerender-spa-plugin操作
這篇文章主要介紹了vue-cli單頁面預(yù)渲染seo-prerender-spa-plugin操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Vue3+Vite+TS實(shí)現(xiàn)二次封裝element-plus業(yè)務(wù)組件sfasga
這篇文章主要介紹了在Vue3+Vite+TS的基礎(chǔ)上實(shí)現(xiàn)二次封裝element-plus業(yè)務(wù)組件sfasga,下面文章也將圍繞實(shí)現(xiàn)二次封裝element-plus業(yè)務(wù)組件sfasga的相關(guān)介紹展開相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可惡意參考一下2021-12-12vue element ui使用選擇器實(shí)現(xiàn)地區(qū)選擇兩種方法
這篇文章主要給大家介紹了關(guān)于vue element ui使用選擇器實(shí)現(xiàn)地區(qū)選擇的兩種方法,Element UI是一套基于Vue.js開發(fā)的UI組件庫,其中包含了地區(qū)選擇器(Cascader)組件,需要的朋友可以參考下2023-09-09vue實(shí)現(xiàn)列表無縫循環(huán)滾動
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)列表無縫循環(huán)滾動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07vue 使用eventBus實(shí)現(xiàn)同級組件的通訊
這篇文章主要介紹了vue 使用eventBus實(shí)現(xiàn)同級組件的通訊,需要的朋友可以參考下2018-03-03uniapp模仿微信實(shí)現(xiàn)聊天界面的示例代碼
這篇文章主要介紹了如何利用uniapp模仿微信,實(shí)現(xiàn)一個聊天界面。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Vue有一定的幫助,感興趣的可以了解一下2022-01-01vue-element如何實(shí)現(xiàn)動態(tài)換膚存儲
這篇文章主要介紹了vue-element如何實(shí)現(xiàn)動態(tài)換膚存儲問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04如何使用Webstorm和Chrome來調(diào)試Vue項(xiàng)目
這篇文章主要介紹了如何使用Webstorm和Chrome來調(diào)試Vue項(xiàng)目,對Vue感興趣的同學(xué),一定要看一下2021-05-05