vue的功能模块
一、核心模块(Vue 核心库自带)
1. 响应式系统
-
原理:Vue 3 基于
Proxy代理对象,拦截对数据的get、set、delete等操作,实现依赖追踪和变更通知。 -
用法:在
data()(选项式)或ref/reactive(组合式)中定义数据,数据改变时视图自动更新。 -
示例:
// 组合式 API
import { reactive, watchEffect } from 'vue';
const state = reactive({ count: 0 });
watchEffect(() => console.log(state.count)); // 自动执行
state.count++; // 触发依赖,watchEffect 再次运行
2. 组件系统
-
原理:组件是可复用的 Vue 实例,封装模板、逻辑和样式。通过
props接收父组件数据,通过emit触发父组件事件。 -
用法:
.vue单文件组件(SFC),或者defineComponent定义。 -
示例:
<!-- 子组件 Child.vue -->
<template>
<button @click="emit('update', count + 1)">+1</button>
</template>
<script setup>
const props = defineProps(['count']);
const emit = defineEmits(['update']);
</script>
3. 模板编译
-
原理:Vue 的模板(
<template>)在构建时或运行时被编译成渲染函数(render),渲染函数返回虚拟 DOM 节点。 -
用法:开发者写模板语法,Vue 自动编译,无需手动调用。
-
示例:
<template>
<div v-if="visible">Hello
4. 虚拟 DOM
-
原理:用 JavaScript 对象描述真实 DOM 结构,每次数据变更生成新虚拟 DOM,与旧虚拟 DOM 对比(diff 算法),找出最小变更,再更新真实 DOM。
-
优点:减少昂贵 DOM 操作,提升性能。
-
用法:开发者不直接操作 DOM,通过数据驱动。
5. 指令系统
-
内置指令:
-
v-if/v-else/v-else-if:条件渲染(有切换开销)。 -
v-show:条件显示(CSS 切换)。 -
v-for:列表渲染。 -
v-bind(缩写:):动态绑定属性。 -
v-on(缩写@):绑定事件。 -
v-model:表单双向绑定。
-
-
自定义指令:
// 注册全局指令,使输入框自动获得焦点
app.directive('focus', {
mounted(el) { el.focus(); }
});
// 使用 <input v-focus />
6. 混入 (Mixin) —— Vue 3 中仍可用但更推荐 Composition API
-
原理:将多个组件共用的选项(data、methods、生命周期等)混入到一个对象中。
-
用法:
// mixin.js
export const myMixin = {
data() { return { common: 'shared' }; },
created() { console.log('mixin hook'); }
};
// 组件中使用
import { myMixin } from './mixin';
export default { mixins: [myMixin] };
7. 插件机制
-
原理:插件是一个对象或函数,必须提供
install方法,接收app实例和额外选项。 -
用法:
// plugin.js
export default { install(app, options) { app.provide('key', options.val); } };
// main.js
app.use(plugin, { val: 'test' });
8. 过渡动画
-
原理:当元素插入/移除 DOM 时,Vue 自动添加/移除 CSS 类名,或调用 JavaScript 钩子。
-
用法:包裹
<Transition>或<TransitionGroup>。 -
示例:
<Transition name="fade">
<p v-if="show">hello</p>
</Transition>
<style>
.fade-enter-active, .fade-leave-active { transition: opacity 0.5s; }
.fade-enter-from, .fade-leave-to { opacity: 0; }
</style>
二、官方生态模块(独立安装)
1. Vue Router(路由)
-
原理:监听 URL 变化,匹配路由规则,渲染对应组件,不刷新页面(利用 History API 或 hash 模式)。
-
核心组件:
<RouterLink>(导航链接)、<RouterView>(视图占位符)。 -
示例:
// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({ history: createWebHistory(), routes });
// main.js app.use(router)
2. Pinia(状态管理)
-
原理:使用
ref和reactive存储全局状态,通过defineStore定义 store,支持 action、getter,且与 Vue 响应式集成。 -
对比 Vuex:更简洁,无 mutation,完美支持 TypeScript,且去掉了命名空间的概念(用不同 store 分离)。
-
示例:
// stores/user.js
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {
state: () => ({ name: '张三' }),
actions: { setName(newName) { this.name = newName; } },
getters: { upperName: (state) => state.name.toUpperCase() }
});
// 组件中使用 const userStore = useUserStore(); userStore.name // 响应式
3. Vite(构建工具)
-
原理:利用原生 ES 模块(ESM)在开发时提供极速热更新,生产用 Rollup 打包。相比 Webpack 快 10-100 倍。
-
特点:预构建依赖、按需编译、开箱即用 TypeScript / JSX / CSS 预处理器。
4. Vue Devtools(调试)
-
功能:检查组件树、查看数据状态、时间旅行调试、性能分析、Pinia/Vuex 状态查看。
三、常用第三方模块(详细)
1. Element Plus(UI 组件库)
-
组件数量:超过 70 个(按钮、表格、表单、弹窗、通知等)。
-
特点:按需引入、支持暗黑主题、国际化、TypeScript 支持。
-
示例:
<template>
<el-button type="primary" @click="visible = true">打开</el-button>
<el-dialog v-model="visible">对话框内容</el-dialog>
</template>
2. Axios(HTTP 请求)
-
常用封装:创建实例、请求/响应拦截器(处理 token、错误统一提示)。
-
与 Vue 结合:在组合式 API 中直接调用,或在 pinia action 中调用。
// request.js
import axios from 'axios';
const instance = axios.create({ baseURL: '/api' });
instance.interceptors.response.use(res => res.data, err => Promise.reject(err));
// 组件内 import request; const res = await request.get('/users')
3. VueUse(组合式工具集)
-
包含:200+ 实用函数,如
useLocalStorage、useMouse、useFetch、useInterval。 -
示例:
import { useLocalStorage, useMouse } from '@vueuse/core';
const storage = useLocalStorage('key', 'default');
const { x, y } = useMouse(); // 实时获取鼠标位置
4. VeeValidate(表单验证)
-
原理:基于 Composition API,提供
useForm、useField钩子,支持 yup 或 zod 模式。 -
示例:
<script setup>
import { useForm, useField } from 'vee-validate';
import * as yup from 'yup';
const schema = yup.object({ email: yup.string().required().email() });
const { handleSubmit } = useForm({ validationSchema: schema });
const { value: email, errorMessage } = useField('email');
const onSubmit = handleSubmit(values => console.log(values));
</script>
5. Vue-i18n(国际化)
-
-
示例:
// i18n.js
import { createI18n } from 'vue-i18n';
const messages = { en: { hello: 'Hello' }, zh: { hello: '你好' } };
const i18n = createI18n({ locale: 'zh', messages });
// 组件内 {{ $t('hello') }}
四、总结:各模块在项目中的作用
| 模块 | 角色 | 必备程度 |
|---|---|---|
| 响应式 + 组件 + 模板 | 基石 | 必选 |
| 虚拟 DOM + 指令 | 优化与便利 | 必选 |
| Vue Router | 多页面切换 | 绝大多数 SPA 必选 |
| Pinia | 跨组件共享数据 | 大型应用必选 |
| Vite | 构建与开发 | 强烈推荐 |
| Element Plus | 快速构建 UI | 后台管理推荐 |
| Axios | 接口调用 | 与后端交互必备 |
| VueUse | 工具增强 | 推荐(减少手写逻辑) |
| VeeValidate | 复杂表单 | 按需 |
| i18n | 多语言 | 按需 |
如果你正在规划一个新项目,建议基础组合:Vue3 + Vite + Pinia + Vue Router + Element Plus + Axios + VueUse

浙公网安备 33010602011771号