Vue3中name有什麼用呢?
1.在遞迴元件的時候需要定義name
2.配合keep-alive include exclude 可以快取元件
3.在Vue有報錯或是調試的時候可以看到元件的name
Vue3 定義name
1.自動產生
<script setup></script>
只要在script
#開啟setup
語法糖模式單一檔案元件會自動根據檔案名稱產生對應的 name
選項例如Tree.vue
那他的name
#就是Tree
自動生成,這樣做有一個弊端如果想修改name
需要修改元件名稱如果有地方import
該元件需要一併修改。
2.在開啟一個script用來定義name
優點 這種方式可以隨意定義name 弊端 一個單一檔案元件出現兩個script 會讓人感到疑惑。
<template> <div></div> </template> <script lang="ts" setup> import {ref,reactive } from 'vue' </script> <script lang='ts'> export default { name:"XXX" } </script> <style lang="less" scoped> </style>
3.使用第三方外掛程式unplugin-vue-define-options
安裝方法npm i unplugin-vue-define-options -D
#vite
使用
// vite.config.ts import DefineOptions from 'unplugin-vue-define-options/vite' import Vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [Vue(), DefineOptions()], })
配置tsconfig.json
// tsconfig.json { "compilerOptions": { // ... "types": ["unplugin-vue-define-options/macros-global" /* ... */] } }
使用方法透過編譯巨集defineOptions
新增name
和inheritAttrs
<script setup lang="ts"> defineOptions({ name: 'Foo', inheritAttrs: false, }) </script>
4.個人想法我想著直接在script 定義name 不好嗎?
<template> <div></div> </template> <script name="xiaoman" lang="ts" setup> import {ref,reactive } from 'vue' </script> <style lang="less" scoped> </style>
這件事情在Vue社區也是進行了激烈的討論,而尤大也是做出了回复
尤大覺得這個構思很好,但是有一些擔憂,在我們使用元件的時候需要定義name
和inheritAttrs
情況非常罕見,大部分元件庫的開發人員可能經常會使用這兩個東西,但對於90%的應用程式組件來說,這確實是一組不同的權衡,並且處理props將會變得很麻煩,再加上實現的複雜性,不確定做這件事是否值得。
不過已經有一個插件實作該功能unplugin-vue-setup-extend-plus
我們來復刻一個簡易版其原理還是加一個script 只不過開發人員看不到了這個script
Vue3 setup 支援name 外掛實作想法借鑒上面外掛程式
import type { Plugin } from 'vite' //@vue/compiler-sfc 这个插件是处理我们单文件组件的代码解析 import { compileScript, parse } from '@vue/compiler-sfc' export default function setupName(): Plugin { return { name: 'vite:plugin:vue:name', //一个 Vite 插件可以额外指定一个 `enforce` 属性 //(类似于 webpack 加载器)来调整它的应用顺序。`enforce` 的值可以是`pre` 或 `post` //加载顺序为 //Alias //带有 `enforce: 'pre'` 的用户插件 //Vite 核心插件 //没有 enforce 值的用户插件 //Vite 构建用的插件 //带有 `enforce: 'post'` 的用户插件 //Vite 后置构建插件(最小化,manifest,报告) enforce: "pre", //transform code参数就是我们写的代码比如vue代码 id就是路径例如/src/xx/xx.vue transform(code, id) { //只处理vue结尾的文件 if (/.vue$/.test(id)) { let { descriptor } = parse(code) //通过compileScript 处理script 返回result //attrs: { name: 'xm', lang: 'ts', setup: true }, //lang: 'ts', //setup: true, const result = compileScript(descriptor, { id }) //attrs 此时就是一个对象 const name = result.attrs.name const lang = result.attrs.lang const inheritAttrs = result.attrs.inheritAttrs //写入script const template = ` <script ${lang ? `lang=${lang}` : ''}> export default { ${name ? `name:"${name}",` : ''} ${inheritAttrs ? `inheritAttrs: ${inheritAttrs !== 'false'},` : ''} } </script> `; //最后拼接上这段代码 也就是我们加的script这一段 返回code code += template; // console.log(code) } return code } } }
然後在vite config ts 引入我們寫好的外掛
Tree.vue 子元件
<template> <div v-for="item in data"> {{ item.name }} <xm v-if="item?.children?.length" :data='item?.children'></xm> </div> </template> <script name='xm' lang="ts" setup> import { ref, reactive } from 'vue' defineProps<{ data: any[] }>() </script>
#App.vue 父元件
<template> <TreeVue :data="data"></TreeVue> </template> <script lang="ts" setup> import TreeVue from './components/Tree.vue'; const data = [ { name: "1", children: [ { name: "1-1", children: [ { name: "1-1-1" } ] } ] } ] </script>
元件成功遞歸出來
以上是Vue3中setup怎麼加name的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

Netflix在前端技術上的選擇主要集中在性能優化、可擴展性和用戶體驗三個方面。 1.性能優化:Netflix選擇React作為主要框架,並開發了SpeedCurve和Boomerang等工具來監控和優化用戶體驗。 2.可擴展性:他們採用微前端架構,將應用拆分為獨立模塊,提高開發效率和系統擴展性。 3.用戶體驗:Netflix使用Material-UI組件庫,通過A/B測試和用戶反饋不斷優化界面,確保一致性和美觀性。

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

Netflix在框架選擇上主要考慮性能、可擴展性、開發效率、生態系統、技術債務和維護成本。 1.性能與可擴展性:選擇Java和SpringBoot以高效處理海量數據和高並發請求。 2.開發效率與生態系統:使用React提升前端開發效率,利用其豐富的生態系統。 3.技術債務與維護成本:選擇Node.js構建微服務,降低維護成本和技術債務。

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應用的性能和開發效率。 2)Vue在Netflix的內部工具和小型項目中應用,其靈活性和易用性是關鍵。

Vue.js是一種漸進式JavaScript框架,適用於構建複雜的用戶界面。 1)其核心概念包括響應式數據、組件化和虛擬DOM。 2)實際應用中,可以通過構建Todo應用和集成VueRouter來展示其功能。 3)調試時,建議使用VueDevtools和console.log。 4)性能優化可通過v-if/v-show、列表渲染優化和異步加載組件等實現。

Vue.js適合小型到中型項目,而React更適用於大型、複雜應用。 1.Vue.js的響應式系統通過依賴追踪自動更新DOM,易於管理數據變化。 2.React採用單向數據流,數據從父組件流向子組件,提供明確的數據流向和易於調試的結構。

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。