YOLOv8 与 CNN 毕设算法选型对比:3个图像识别项目精度与速度实测
2026/7/7 14:37:24
在 Vue 中:
组件 = 可复用的 UI + 行为单元
使用组件的前提是:先导入(import),再注册(register),最后使用
<template> <MyComponent /> </template>一个标准 Vue 3 组件(SFC):
<!-- components/HelloWorld.vue --> <template> <div>Hello World</div> </template> <script setup lang="ts"> </script>Vue 3 中常见的组件注册方式有4 种:
| 注册方式 | 使用范围 | 是否推荐 |
|---|---|---|
| 局部注册 | 当前组件 | 强烈推荐 |
| 全局注册 | 整个应用 | 谨慎使用 |
<script setup>自动注册 | 当前组件 | 强烈推荐 |
| 自动导入(插件) | 整个项目 | 企业级推荐 |
<script> import HelloWorld from '@/components/HelloWorld.vue' export default { components: { HelloWorld } } </script> <template> <HelloWorld /> </template>作用域清晰
不污染全局
Tree Shaking 友好
<script> import { defineComponent } from 'vue' import HelloWorld from '@/components/HelloWorld.vue' export default defineComponent({ components: { HelloWorld } }) </script><script setup>中的组件注册(Vue 3 主流)在
<script setup>中:只要 import,就等于注册
<script setup lang="ts"> import HelloWorld from '@/components/HelloWorld.vue' </script> <template> <HelloWorld /> </template><script setup>是编译期语法糖
编译器会自动把import的组件注入到模板作用域
不再需要components: {}
import MyButton from './MyButton.vue'模板中两种写法都可以:
<MyButton /> <my-button />推荐:组件文件名用 PascalCase
// main.ts import { createApp } from 'vue' import App from './App.vue' import BaseButton from '@/components/BaseButton.vue' const app = createApp(App) app.component('BaseButton', BaseButton) app.mount('#app')<BaseButton />基础组件(Button / Icon / Modal)
UI 框架封装组件
不依赖业务上下文的组件
组件来源不清晰
不利于 Tree Shaking
大型项目中可维护性差
defineAsyncComponent<script setup> import { defineAsyncComponent } from 'vue' const AsyncComp = defineAsyncComponent(() => import('@/components/HeavyComponent.vue') ) </script> <template> <AsyncComp /> </template>页面级组件
体积大的组件
非首屏内容
在 Vue 3 + Vite 项目中,强烈推荐使用自动导入方案。
unplugin-vue-componentsnpm install -D unplugin-vue-components// vite.config.ts import Components from 'unplugin-vue-components/vite' export default { plugins: [ Components({ dirs: ['src/components'], extensions: ['vue'], deep: true }) ] }<template> <HelloWorld /> </template>无需手动 import
支持按需加载
组件使用体验接近全局组件但更安全
Failed to resolve component排查顺序:
是否import
路径是否正确
是否大小写不一致
是否<script setup>
import helloworld from './HelloWorld.vue' // 错误<template> <HelloWorld /> </template>但<script setup>中没有 import
| 场景 | 推荐方案 |
|---|---|
| 业务组件 | 局部注册 / script setup |
| 页面组件 | 异步组件 |
| 基础组件 | 全局或自动导入 |
| 中大型项目 | 自动导入 + 局部注册 |