当前位置: 首页 > news >正文

vue 知识点

Vue 基本原理

响应式系统:基于 Object.defineProperty 或 Proxy 实现数据劫持
虚拟 DOM:通过 diff 算法高效更新真实 DOM
组件化:将 UI 拆分为独立可复用的组件
模板编译:将模板转换为渲染函数
生命周期钩子:提供组件创建、更新和销毁过程中的回调函数
onMounted:组件挂载后
onUpdated:组件更新后
onUnmounted:组件卸载后
onBeforeMount/onBeforeUpdate/onBeforeUnmount:对应阶段前触发
onErrorCaptured:捕获子组件错误

Vue 常用知识点

指令系统:v-if/v-show、v-for、v-bind、v-on、v-model
组件通信:props/$emit、provide/inject、$parent/$children、Vuex
计算属性和侦听器:computed 和 watch 的使用场景
插槽:默认插槽、具名插槽、作用域插槽
过渡动画:transition 和 transition-group 组件
混入:mixins 的基本用法
自定义指令:全局和局部指令定义

ES6 常用点

变量声明:let 和 const 块级作用域
箭头函数:简洁语法和 this 绑定
模板字符串:支持多行和变量嵌入
解构赋值:数组和对象解构
扩展运算符:… 用于数组和对象
Promise:异步编程解决方案
Class:类语法糖
模块化:import/export
默认参数:函数参数默认值
Symbol:唯一标识符
Map/Set:新的数据结构
迭代器和生成器:for…of 和 function*

Vue 主流脚手架工具
Vue CLI
Vue CLI 是 Vue 官方提供的标准脚手架工具,适合构建完整的 Vue 项目,支持插件系统、图形化界面和丰富的配置选项。

核心功能:快速初始化项目、集成 Webpack/Babel/ESLint 等工具链。
适用场景:企业级应用、需要高度自定义配置的项目。
Vite
Vite 是新一代前端构建工具,由 Vue 作者尤雨溪开发,主打极速启动和热更新。

核心优势:基于原生 ES Modules,开发环境启动快,适合现代浏览器项目。
适用场景:快速原型开发、对构建速度敏感的项目。
Nuxt.js
Nuxt.js 是基于 Vue 的通用应用框架(SSR/静态站点生成),内置路由、状态管理等。

核心优势:一套代码多端部署,内置大量 UI 组件和工具。
适用场景:需要同时覆盖多端的项目(Web/iOS/Android/Electron)。
选择建议
快速开发轻量应用:优先考虑 Vite。
复杂企业级项目:Vue CLI 或 Nuxt.js(需 SSR)非集群项目不推荐,非常吃服务端性能。

桌面端开发
electron-vite 是一个专为 Electron 应用设计的构建工具,基于 Vite 的快速开发能力,为 Electron 的主进程(Main Process)、渲染进程(Renderer Process)和预加载脚本(Preload Script)提供开箱即用的支持。它简化了 Electron 项目的配置流程,并优化了开发和生产环境的构建效率。
开发桌面端项目: 利用 Vite 的快速启动和热更新能力,提升开发体验

Vue3 项目搭建与目录结构说明

  1. 环境准备
    确保已安装 Node.js(建议 16.x 及以上版本)
    安装 Vue CLI(如未安装):npm install -g @vue/cli
  2. 创建项目
vue create project-name

或使用 Vite 创建:

npm create vite@latest project-name --template vue
  1. 选择配置
    手动选择特性
    推荐选择:
    Vue 3
    TypeScript(可选)
    Router
    Vuex/Pinia(状态管理)
    ESLint(代码规范)
  2. 安装依赖
cd project-name
npm install
  1. 启动项目
npm run serve  # 或 npm run dev(Vite项目)

项目文件结构

project-name/
├── public/                  # 静态资源目录
│   ├── favicon.ico          # 网站图标
│   └── index.html           # 主HTML文件
├── src/                     # 源代码目录
│   ├── assets/              # 静态资源(图片、字体等)
│   ├── components/          # 公用组件
│   ├── router/              # 路由配置
│   ├── store/               # 状态管理(Vuex/Pinia)
│   ├── views/               # 页面级组件
│   ├── App.vue              # 根组件
│   ├── main.js/ts           # 项目入口文件
│   └── shims-vue.d.ts       # TypeScript声明文件(如使用TS)
├── .gitignore               # Git忽略配置
├── babel.config.js          # Babel配置
├── package.json             # 项目依赖配置
├── README.md                # 项目说明文档
└── vue.config.js            # Vue项目配置(可选)

关键文件说明
main.js/ts - 应用入口,初始化Vue实例
App.vue - 根组件,包含路由视图
router/index.js - 路由配置中心
store/index.js - 状态管理配置
components/ - 可复用的公共组件
views/ - 页面级组件,通常与路由对应

状态管理
Pinia(官方推荐,替代 Vuex)
简化的 API,支持 TypeScript,无需 mutations,直接通过 actions 修改状态:

vue3 常用UI框架

Element Plus
基于 Vue 3 的 Element UI 升级版,适合中后台管理系统开发。

提供丰富的组件(表格、表单、弹窗等)
支持按需引入和主题定制
文档完善,社区活跃
安装命令:npm install element-plus --save
Vant
轻量级移动端组件库,由有赞团队维护。

支持 Vue 3 的 Composition API
提供 60+ 移动端常用组件
支持 REM 和 VW 布局适配
安装命令:npm install vant@next --save

vue3 提升性能的方法
减少响应式数据使用
仅在需要动态更新的数据上使用ref或reactive,静态数据可直接用普通变量。过度使用响应式系统会增加内存和计算开销。

// 不推荐
const staticData = reactive({ list: [...] });// 推荐
const staticData = { list: [...] };
const dynamicData = reactive({ count: 0 });

合理使用计算属性
计算属性(computed)会自动缓存结果,避免在模板中重复执行复杂逻辑。但需注意避免嵌套过深的计算属性链。

const filteredList = computed(() => largeList.value.filter(item => item.active)
);

组件懒加载

const AsyncComp = defineAsyncComponent(() => import('./components/HeavyComponent.vue')
);

虚拟滚动优化长列表

<RecycleScroller:items="largeList":item-size="50"v-slot="{ item }"
><div>{{ item.text }}</div>
</RecycleScroller>

事件防抖与节流

<div v-memo="[id]"><DynamicComponent :id="id" />
</div>

避免不必要的组件渲染

<div v-memo="[id]"><DynamicComponent :id="id" />
</div>

优化侦听器

watch(() => props.id,(newVal) => { /* 逻辑 */ },{ immediate: true }
);

生产环境构建配置

// vite.config.js
export default defineConfig({plugins: [vue({reactivityTransform: true})]
});

使用KeepAlive缓存组件

<KeepAlive include="TabComponent"><component :is="currentComponent" />
</KeepAlive>

手动控制依赖追踪

const heavyObject = markRaw({ ... });
const shallowObj = shallowRef({ ... });

vite.config 配置基本说明

Vite 的配置文件 vite.config.js 默认导出一个对象,支持通过 defineConfig 包装以获取类型提示(需安装 vite 或 @vitejs/plugin-vue 等插件包)

import { defineConfig } from 'vite';export default defineConfig({// 配置项
});

常用配置项说明
根目录与路径别名
root: 项目根目录(默认为 process.cwd())。
base: 部署基础路径(如 /sub-path/)。
resolve.alias: 路径别名配置。

import path from 'path';export default defineConfig({root: './src',base: '/my-app/',resolve: {alias: {'@': path.resolve(__dirname, './src'),},},
});

开发服务器配置
server.port: 指定端口(默认 5173)。
server.proxy: 配置代理解决跨域。

export default defineConfig({server: {port: 3000,proxy: {'/api': {target: 'http://localhost:8080',changeOrigin: true,},},},
});

生产构建配置
build.outDir: 输出目录(默认 dist)。
build.minify: 是否压缩代码(默认 esbuild)。
build.sourcemap: 是否生成 sourcemap。

export default defineConfig({build: {outDir: 'build',minify: 'terser',sourcemap: true,},
});

插件配置
通过 plugins 数组引入插件,例如 Vue 或 React 支持:

import vue from '@vitejs/plugin-vue';export default defineConfig({plugins: [vue()],
});

环境变量与模式
envDir: 环境变量文件目录(默认根目录)。
mode: 指定运行模式(如 development 或 production)。

export default defineConfig({envDir: './env',mode: 'development',
});

文章转载自:

http://nfk54tUU.cpgtL.cn
http://YIjdC66y.cpgtL.cn
http://XytBjuKt.cpgtL.cn
http://X4Dg1sun.cpgtL.cn
http://i9aHEMmO.cpgtL.cn
http://PKS3Ocmu.cpgtL.cn
http://D2Ich2Lk.cpgtL.cn
http://9CW7fH0d.cpgtL.cn
http://6jxrWl6C.cpgtL.cn
http://xMLCdpkN.cpgtL.cn
http://1lq0fz7F.cpgtL.cn
http://2UBLDxZr.cpgtL.cn
http://8di2lCwv.cpgtL.cn
http://ZGrhaUrQ.cpgtL.cn
http://GA97ZDi0.cpgtL.cn
http://GTye5jWo.cpgtL.cn
http://WeLC9qBW.cpgtL.cn
http://DuHD81ah.cpgtL.cn
http://0y7b5lta.cpgtL.cn
http://6AzyZWye.cpgtL.cn
http://j9T5a26b.cpgtL.cn
http://bwLJ0cke.cpgtL.cn
http://QEfk288D.cpgtL.cn
http://p7LrsBCG.cpgtL.cn
http://uXP00Xjc.cpgtL.cn
http://2pmP4OpO.cpgtL.cn
http://I48MCt2R.cpgtL.cn
http://5NG0C89f.cpgtL.cn
http://irUu3qpI.cpgtL.cn
http://7oHz4sWJ.cpgtL.cn
http://www.dtcms.com/a/387802.html

相关文章:

  • 深入理解 Linux 进程调度:从策略到实现的全方位解析
  • 【技术架构】从单机到微服务:Java 后端架构演进与技术选型核心方案
  • Java异常报错: java.io.IOException: Broken pipe
  • [Linux]学习笔记系列 -- lib/kobject.c 内核对象(Kernel Object) 设备模型的核心基石
  • 专题:Python实现贝叶斯线性回归与MCMC采样数据可视化分析2实例|附代码数据
  • IEEE 802.1X和**IEEE 802.11之间的关联和作用
  • 【Linux】【底层解析向】Linux Shell 核心功能拆解:环境变量不生效原因 + $?/echo/alias 底层逻辑
  • UV紫外卤素灯太阳光模拟器的原理
  • RAG简单构建(ollama+uv+deepseek)
  • 告别冰冷AI音!B站开源IndexTTS2模型,零样本克隆+情感解耦,玩法超多!
  • pytorch中.pt和.pth文件区别
  • 目标计数(3)Object Counting: You Only Need to Look at One
  • 拖拽移动并监听点击事件
  • Hibernate 和 MyBatis差异分析
  • RAG 核心技术深度剖析:架构设计与性能优化实战指南
  • Java全栈学习笔记36
  • python 任务管理器
  • AI 驱动智能驾驶:L4 级技术落地瓶颈、车企博弈与用户信任构建
  • VS Code和Cursor扩展主机在过去5分钟内意外终止了3次问题解决方案
  • 【TestCenter】创建DHCP Server和DHCP Client
  • 内存泄漏系列专题分析之三十五:开机内存性能优化之一:Camx进程启动提前加载so库
  • 知微传感Dkam系列3D相机SDK例程篇:CSharp设置相机工作模式
  • 《华为基本法》 —— 企业发展的导航仪
  • devops平台建设-总体设计文档
  • 大数据七大业务架构横向比对分析
  • C#面试题及详细答案120道(21-30)-- 集合与泛型
  • 如何对AI代理的决策进行审计和监督?
  • .NET驾驭Word之力:玩转文本与格式
  • NLP中Subword算法:WordPiece、BPE、BBPE、SentencePiece详解以及代码实现
  • 解决Dify部署痛点:Docker镜像源优化配置指南