vue 技巧与易错

文章目录

解构

解构

  • JavaScript 的 对象解构赋值 语法,作用是从对象中快速提取指定属性,并赋值给同名变量。
javascript 复制代码
const user = { name: '张三', age: 20 }

// 解构赋值:从 user 中提取 name 属性,赋值给变量 name
const { name } = user 

// 等价于:
const name = user.name 

// 区别于下面,下面的name就变为和user一样的对象了
const name = user

响应式

在 Vue 中,响应式 API 是指一系列能够将数据转换为"响应式数据"的工具(如 reactive、ref、computed 等)。它们的核心作用是建立数据与视图之间的自动关联:当数据发生变化时,依赖该数据的视图会自动更新,无需手动操作 DOM。

为什么需要响应式 API?

在传统开发中,修改数据后需要手动更新 DOM(比如 document.getElementById('xxx').innerText = newData),既繁琐又容易出错。而 Vue 的响应式 API 让开发者可以专注于数据逻辑,视图更新由框架自动完成。

核心响应式 API 及作用

Vue3 中常用的响应式 API 包括:

  1. reactive

    将对象/数组 转为响应式代理对象,使其属性的读写、新增、删除都能被追踪,修改时触发视图更新。

    示例:

    javascript 复制代码
    import { reactive } from 'vue'
    const user = reactive({ name: '张三' })
    user.name = '李四' // 视图自动更新
  2. ref

    将基本类型数据 (字符串、数字、布尔等)或对象转为响应式数据。对于基本类型,ref 会包装成一个带 .value 属性的对象;对于对象,内部会自动用 reactive 处理。

    示例:

    javascript 复制代码
    import { ref } from 'vue'
    const count = ref(0)
    count.value++ // 修改时需通过 .value,视图自动更新
  3. computed

    创建基于现有响应式数据的"计算属性",其值会根据依赖自动更新,且具有缓存特性(依赖不变时不会重复计算)。

    示例:

    javascript 复制代码
    import { ref, computed } from 'vue'
    const count = ref(1)
    const doubleCount = computed(() => count.value * 2) // 依赖 count
    count.value = 2 // doubleCount 自动变为 4
  4. watch 与 watchEffect

    监听响应式数据的变化,执行自定义逻辑(如数据变化后发送请求、更新其他数据等)。

    • watch:需明确指定监听的数据源,更灵活。
    • watchEffect:自动追踪依赖的数据源,简化写法。
      示例:
    javascript 复制代码
    import { ref, watch } from 'vue'
    const count = ref(0)
    watch(count, (newVal) => {
      console.log('count 变了:', newVal) // count 变化时执行
    })

响应式的核心原理

Vue3 的响应式基于 ES6 Proxy 代理 实现:

  • 当使用 reactive 或 ref 包装数据时,Vue 会创建一个"代理对象",拦截数据的读写、修改等操作。
  • 当数据被读取时(如在模板中使用),Vue 会记录"谁在使用这个数据"(依赖收集)。
  • 当数据被修改时,Vue 会通知所有依赖该数据的地方(如组件、计算属性)重新执行或渲染(触发更新)。

总结

响应式 API 是 Vue 框架的核心能力之一,它通过自动追踪数据变化并更新视图,大幅简化了前端开发流程。开发者只需关注数据逻辑,无需手动操作 DOM,从而提高开发效率和代码可维护性。常用的 reactive、ref、computed、watch 等 API 共同构成了 Vue 的响应式系统。

文本插值语法

在 Vue 模板中,{``{ count }} 是文本插值语法 ,作用是将响应式数据 count 的值渲染到页面上,并且会随着 count 的变化自动更新。

具体理解:

  1. {``{ }} 是 Vue 的文本插值语法

    它的作用是告诉 Vue:"这里需要插入一个 JavaScript 表达式的值,并显示在页面上"。

    模板在解析时,会把 {``{ }} 内部的内容当作 JavaScript 表达式执行,然后将结果转换为字符串,插入到对应的 DOM 位置。

  2. count 是响应式数据

    在前面的示例中,count 是通过 ref 定义的响应式数据(const count = ref(1))。

    • 初始时,count.value 的值是 1,所以 {``{ count }} 会渲染为 1。
    • 当 count.value 被修改(比如 count.value = 2)时,Vue 会自动检测到这个变化,并重新计算 {``{ count }} 的值,将页面上的内容更新为 2。
  3. 与非响应式数据的区别

    如果 count 是普通变量(非 ref/reactive 定义),比如 const count = 1,那么 {``{ count }} 只会在初始渲染时显示 1,后续即使修改 count 的值(count = 2),页面也不会更新------因为普通变量不具备响应性,Vue 无法追踪其变化。

相关推荐
卸任7 小时前
Vibe coding工具使用心得
前端·ai编程
brien98 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance8 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M8 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写8 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李8 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易9 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
清晨Coding9 小时前
删了 Cookie 还能自动登录?Google系网站登录态自动恢复的原理分析
javascript
风骏时光牛马9 小时前
前沿视界
前端
kyriewen9 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员