Vue3 实用技巧

跨层级传值:provideinject

在深层嵌套组件中,避免通过 props 逐层传递数据,使用 provide/inject 实现"直通式"数据共享:

js 复制代码
// 父组件
import { provide } from 'vue'; 
export default { 
    setup() { provide('theme', 'dark'); } 
}; 
// 子组件(任意层级)
import { inject } from 'vue';
export default { 
    setup() { 
        const theme = inject('theme'); // ✅ 获取父组件提供的值 } 
    };

组件传送门:Teleport

解决弹窗、下拉菜单等组件被父级样式覆盖的问题,通过 Teleport 将组件渲染到指定 DOM 节点(如 body):

xml 复制代码
<template>
    <button @click="showModal = true">打开弹窗</button> 
    <Teleport to="body">
        <div v-if="showModal" class="modal">
            <h3>重要通知</h3>
            <p>内容不受父级样式限制</p>
        </div> 
    </Teleport>
</template>

优势:彻底摆脱 DOM 层级嵌套限制,简化样式管理。

优化

列表渲染优化:v-memo

对长列表或动态表格,使用 v-memo 缓存渲染结果,仅当依赖项变化时重新渲染:

css 复制代码
<ul> 
    <li v-for="item in list" :key="item.id" v-memo="[item.id, item.status]">
        {{ item.name }} - {{ item.status }}
    </li>
</ul>

效果:减少无效更新,提升滚动流畅度。

虚拟滚动:vue-virtual-scroller

对于超长列表(如 1000+ 条数据),使用虚拟滚动库仅渲染可视区域内的元素,大幅降低 DOM 节点数:

html 复制代码
<template>
    <VirtualScroller :items="list" :item-size="50">
        <template v-slot="{ item }">
            <div>{{ item.name }}</div>
        </template>
    </VirtualScroller>
</template>

性能提升:从渲染 1000 个 DOM 节点降至渲染 10-20 个。

列表渲染 key 选择策略

  • 使用 index 作为 key:仅适用于无状态、不增删的列表(如分页展示)。
  • 使用唯一 id 作为 key:适用于大多数场景,确保精准更新。
  • 动态生成 key :当数据无唯一标识时,可使用 Symbol()uuid
js 复制代码
const list = ref([ 
    { id: Symbol(), name: '项目A' }, 
    { id: Symbol(), name: '项目B' } 
]);
相关推荐
JIngJaneIL16 分钟前
基于java+ vue助农电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
q_191328469521 分钟前
基于Springboot+MySQL+RuoYi的会议室预约管理系统
java·vue.js·spring boot·后端·mysql·若依·计算机毕业设计
想学后端的前端工程师26 分钟前
【Java集合框架深度解析:从入门到精通-后端技术栈】
前端·javascript·vue.js
小鑫同学1 小时前
vue-pdf-interactor 技术白皮书:为现代 Web 应用注入交互式 PDF 能力
前端·vue.js·github
布茹 ei ai1 小时前
城市天气查询系统 (City Weather Dashboard)
javascript·vue.js·html·css3·开源软件·天气预报
全栈老石2 小时前
从硬编码到 Schema 推断:前端表单开发的工程化转型
前端·vue.js·架构
VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue乡村振兴服务系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
期待のcode3 小时前
验证码实现
java·vue.js
韭菜炒大葱3 小时前
现代前端开发工程化:Vue3 + Vite 带你从 0 到 1 搭建 Vue3 项目🚀
前端·vue.js·vite
老华带你飞3 小时前
志愿者服务管理|基于springboot 志愿者服务管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring