🌙

vue的功能模块

一、核心模块(Vue 核心库自带)

1. 响应式系统

  • 原理:Vue 3 基于 Proxy 代理对象,拦截对数据的 getsetdelete 等操作,实现依赖追踪和变更通知。

  • 用法:在 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 {{ name }}</div>
</template>
<!-- 编译后类似 -->
render() { return h('div', visible ? 'Hello ' + this.name : null); }

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(状态管理)

  • 原理:使用 refreactive 存储全局状态,通过 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+ 实用函数,如 useLocalStorageuseMouseuseFetchuseInterval

  • 示例

import { useLocalStorage, useMouse } from '@vueuse/core';
const storage = useLocalStorage('key', 'default');
const { x, y } = useMouse(); // 实时获取鼠标位置

4. VeeValidate(表单验证)

  • 原理:基于 Composition API,提供 useFormuseField 钩子,支持 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(国际化)

  • 原理:提供全局 $t 方法,根据当前 locale 翻译键值。支持复数、日期格式化。

  • 示例

// 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,并在大项目中强制使用 TypeScript。

posted @ 2026-06-02 23:41  星火撩原  阅读(11)  评论(0)    收藏  举报
本站已运行:0
🌙 夜间模式
🌙
🌙