news 2026/6/10 15:21:17

Vue.js 前端框架开发知识点总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue.js 前端框架开发知识点总结

前言

Vue.js 作为目前最流行的前端框架之一,以其简洁的 API、灵活的组件化和优秀的性能获得了广大开发者的青睐。本文将系统总结 Vue.js 的核心知识点,帮助开发者更好地掌握这一框架。

一、Vue.js 核心概念

1.1 响应式原理

Vue.js 的响应式系统是其核心特性,通过以下机制实现:

// Vue 2.x 使用 Object.defineProperty const data = { message: 'Hello' }; Object.defineProperty(data, 'message', { get() { console.log('读取数据'); return value; }, set(newValue) { console.log('更新数据'); value = newValue; // 触发视图更新 } }); // Vue 3.x 使用 Proxy const reactiveData = new Proxy(data, { get(target, key) { track(target, key); // 收集依赖 return target[key]; }, set(target, key, value) { target[key] = value; trigger(target, key); // 触发更新 return true; } });

1.2 生命周期钩子

export default { // 创建阶段 beforeCreate() { // 初始化之前,数据观测和事件配置未完成 }, created() { // 实例创建完成,数据观测、计算属性、方法已配置 }, // 挂载阶段 beforeMount() { // 模板编译/挂载之前 }, mounted() { // 实例挂载到DOM后调用 }, // 更新阶段 beforeUpdate() { // 数据更新时,DOM重新渲染之前 }, updated() { // DOM更新完成后调用 }, // 销毁阶段 beforeDestroy() { // 实例销毁之前 }, destroyed() { // 实例销毁后调用 } }

二、模板语法与指令

2.1 基础模板语法

<template> <!-- 插值表达式 --> <div>{{ message }}</div> <!-- 指令 --> <div v-if="show">条件渲染</div> <div v-show="visible">显示/隐藏</div> <!-- 列表渲染 --> <ul> <li v-for="(item, index) in items" :key="item.id"> {{ item.name }} </li> </ul> <!-- 事件处理 --> <button @click="handleClick">点击</button> <!-- 双向绑定 --> <input v-model="inputValue" /> </template>

2.2 常用指令总结

指令说明示例
v-bind属性绑定:class="className"
v-model双向绑定v-model="value"
v-for列表渲染v-for="item in list"
v-if条件渲染v-if="condition"
v-show显示/隐藏v-show="isVisible"
v-on事件监听@click="handleClick"

三、组件化开发

3.1 组件定义与使用

// 单文件组件结构 <template> <div class="component"> <slot></slot> </div> </template> <script> export default { name: 'MyComponent', props: { // 属性验证 title: { type: String, required: true, default: '默认标题' } }, data() { return { count: 0 } }, methods: { increment() { this.count++; this.$emit('increment', this.count); } } } </script> <style scoped> .component { color: #333; } </style>

3.2 组件通信方式

javascript

// 1. 父子组件通信 // 父传子:props // 子传父:$emit // 2. 兄弟组件通信 // 使用事件总线或Vuex const EventBus = new Vue(); // 3. 跨级组件通信 // provide/inject export default { provide() { return { theme: this.theme } } } // 子组件 export default { inject: ['theme'] }

四、状态管理 Vuex

4.1 Vuex 核心概念

javascript

// store.js import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state: { count: 0, user: null }, mutations: { // 同步修改状态 SET_COUNT(state, payload) { state.count = payload; }, SET_USER(state, user) { state.user = user; } }, actions: { // 异步操作 async fetchUser({ commit }) { const user = await api.getUser(); commit('SET_USER', user); } }, getters: { // 计算属性 doubleCount: state => state.count * 2 }, modules: { // 模块化 userModule: { namespaced: true, state: { /* ... */ } } } });

4.2 Vuex 使用示例

javascript

// 组件中使用 export default { computed: { count() { return this.$store.state.count; }, doubleCount() { return this.$store.getters.doubleCount; } }, methods: { increment() { this.$store.commit('SET_COUNT', this.count + 1); }, async loadUser() { await this.$store.dispatch('fetchUser'); } } }

五、路由管理 Vue Router

5.1 路由配置

javascript

// router.js import Vue from 'vue'; import Router from 'vue-router'; import Home from './views/Home.vue'; Vue.use(Router); export default new Router({ mode: 'history', // hash/history routes: [ { path: '/', name: 'home', component: Home, meta: { requiresAuth: true } }, { path: '/about', name: 'about', component: () => import('./views/About.vue'), // 懒加载 children: [ { path: 'detail', component: Detail } ] }, { path: '/user/:id', name: 'user', component: User, props: true // 将路由参数作为props传递 } ] });

5.2 路由导航守卫

javascript

// 全局前置守卫 router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isAuthenticated) { next('/login'); } else { next(); } }); // 组件内守卫 export default { beforeRouteEnter(to, from, next) { // 不能访问this next(vm => { // 通过vm访问组件实例 }); }, beforeRouteUpdate(to, from, next) { // 路由参数变化时调用 next(); } }

六、高级特性

6.1 自定义指令

javascript

// 全局指令 Vue.directive('focus', { inserted(el) { el.focus(); } }); // 局部指令 export default { directives: { color: { bind(el, binding) { el.style.color = binding.value; } } } }

6.2 混入 (Mixin)

javascript

// mixin.js export default { data() { return { mixinData: '来自mixin的数据' } }, created() { console.log('mixin created'); }, methods: { mixinMethod() { console.log('mixin方法'); } } } // 使用混入 import myMixin from './mixin'; export default { mixins: [myMixin] }

6.3 插件开发

javascript

const MyPlugin = { install(Vue, options) { // 添加全局方法或属性 Vue.myGlobalMethod = function() { // 逻辑... }; // 添加全局指令 Vue.directive('my-directive', { bind(el, binding, vnode, oldVnode) { // 逻辑... } }); // 添加实例方法 Vue.prototype.$myMethod = function() { // 逻辑... }; } }; Vue.use(MyPlugin);

七、Vue 3 新特性

7.1 Composition API

javascript

import { ref, reactive, computed, watch, onMounted } from 'vue'; export default { setup() { // 响应式数据 const count = ref(0); const state = reactive({ name: 'Vue 3', version: '3.x' }); // 计算属性 const doubleCount = computed(() => count.value * 2); // 监听器 watch(count, (newVal, oldVal) => { console.log(`count变化: ${oldVal} -> ${newVal}`); }); // 生命周期 onMounted(() => { console.log('组件已挂载'); }); // 方法 const increment = () => { count.value++; }; return { count, state, doubleCount, increment }; } };

7.2 Teleport 传送门

html

<template> <div class="modal-container"> <button @click="showModal = true">打开弹窗</button> <teleport to="body"> <div v-if="showModal" class="modal"> <div class="modal-content"> <h2>标题</h2> <button @click="showModal = false">关闭</button> </div> </div> </teleport> </div> </template>

7.3 Fragment 片段

html

<!-- Vue 3 支持多个根节点 --> <template> <header>头部</header> <main>主体内容</main> <footer>底部</footer> </template>

八、性能优化建议

8.1 代码层面优化

  1. 合理使用 v-if 和 v-show

    • v-if:切换开销大,适合条件很少改变的场景

    • v-show:初始渲染开销大,适合频繁切换的场景

  2. key 的使用

    html

    <!-- 为 v-for 设置唯一的 key --> <li v-for="item in list" :key="item.id"> {{ item.name }} </li>
  3. 计算属性缓存

    javascript

    computed: { // 计算属性会缓存结果,只有依赖变化时重新计算 filteredList() { return this.list.filter(item => item.active); } }

8.2 项目优化

  1. 路由懒加载

    javascript

    const Home = () => import('./views/Home.vue');
  2. 组件异步加载

    javascript

    export default { components: { 'heavy-component': () => import('./HeavyComponent.vue') } }
  3. 第三方库按需引入

    javascript

    import { Button, Input } from 'element-ui';

九、常见问题与解决方案

9.1 响应式数据更新问题

javascript

// Vue 2.x 数组更新问题 // 错误的做法 this.items[0] = newValue; // 正确的做法 this.$set(this.items, 0, newValue); // 或 this.items.splice(0, 1, newValue); // 对象属性添加 this.$set(this.obj, 'newProp', value);

9.2 组件复用问题

javascript

// 使用 mixin 或 高阶组件 // 或使用 Composition API 进行逻辑复用 function useCounter() { const count = ref(0); const increment = () => count.value++; return { count, increment }; }

总结

Vue.js 作为一个渐进式框架,提供了从简单到复杂的完整解决方案。掌握以上知识点可以帮助开发者更好地使用 Vue.js 进行项目开发。随着 Vue 3 的普及,Composition API 等新特性将为开发带来更多便利。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:52:16

Day35 PythonStudy

浙大疏锦行 特性函数装饰器类装饰器作用对象函数类传入参数接收函数作为参数接收类作为参数返回值返回包装后的函数返回修改后的类常见用途修改函数行为修改类的结构核心逻辑用闭包包裹函数&#xff0c;在不修改函数代码的前提下扩展功能直接修改类的定义 特性类内部定义方法…

作者头像 李华
网站建设 2026/6/10 12:24:40

2026中专生不想做客服,如何提升自己?

&#x1fae7;毕业季来临&#xff0c;不少中专生发现自己的求职列表里&#xff0c;客服岗占了大半——重复的接线应答、琐碎的投诉处理、有限的薪资涨幅&#xff0c;再加上狭窄的晋升空间&#xff0c;让很多人望而却步。关键在于跳出“低门槛、高重复”的客服赛道&#xff0c;打…

作者头像 李华
网站建设 2026/6/10 22:51:24

DAY 23 常见的特征筛选算法

前言&#xff1a; 在昨天我们提到了如何利用聚类方法来获得新的、信息量更多的特征以此来提升模型的各项性能指标&#xff0c;本文将采用相反的思路&#xff0c;通过一些常见的特征筛选方法减少部分特征以筛选出真正有信息的特征&#xff0c;进而减少计算量、提升模型的精度&am…

作者头像 李华
网站建设 2026/6/10 0:32:57

【Java毕设全套源码+文档】基于springboot的闲置物品共享平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/9 20:02:08

TinyMCE5支持pdf书签目录结构导入

企业级富文本编辑器Word粘贴与导入功能解决方案评估报告 一、需求背景分析 作为江苏某集团企业的项目负责人&#xff0c;我们近期在企业网站后台管理系统的文章发布模块中面临以下核心需求&#xff1a; 增加Word粘贴功能&#xff1a;支持从Word复制内容直接粘贴到编辑器&…

作者头像 李华