首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >vue 使用 使用triggerRef手动触发更新

vue 使用 使用triggerRef手动触发更新

原创
作者头像
小焱
发布2025-08-11 09:24:36
发布2025-08-11 09:24:36
10500
代码可运行
举报
文章被收录于专栏:前端开发前端开发
运行总次数:0
代码可运行

在 Vue 中,triggerRef 是专门用于手动触发 shallowRef 响应式更新的 API。由于 shallowRef 只跟踪 .value 的直接赋值,不监听内部属性变化,当需要修改内部属性并让视图更新时,就需要用 triggerRef 强制触发响应。

以下是 triggerRef 的具体使用示例:

代码语言:javascript
代码运行次数:0
运行
复制
<template>
  <div class="demo-container">
    <h3>triggerRef 示例</h3>
    <div class="data-display">
      <p>当前数据: {{ userInfo }}</p>
      <p>用户名: {{ userInfo.name }}</p>
      <p>年龄: {{ userInfo.age }}</p>
    </div>
    
    <div class="button-group">
      <button @click="modifyInnerProps">修改内部属性(不触发更新)</button>
      <button @click="modifyAndTrigger">修改内部属性 + 手动触发更新</button>
      <button @click="replaceWholeObject">替换整个对象(自动触发)</button>
    </div>
  </div>
</template>

<script setup>
import { shallowRef, triggerRef } from 'vue'

// 创建浅层响应式对象
const userInfo = shallowRef({
  name: '张三',
  age: 25,
  address: '北京'
})

// 仅修改内部属性 - 不会触发视图更新
const modifyInnerProps = () => {
  userInfo.value.age++
  userInfo.value.address = '上海'
  console.log('已修改内部属性,但视图未更新')
}

// 修改内部属性后,用triggerRef手动触发更新
const modifyAndTrigger = () => {
  userInfo.value.age++
  userInfo.value.name = '李四'
  triggerRef(userInfo) // 强制触发响应式更新
  console.log('已修改内部属性并手动触发,视图将更新')
}

// 替换整个.value - 会自动触发更新(无需triggerRef)
const replaceWholeObject = () => {
  userInfo.value = {
    ...userInfo.value,
    name: '王五',
    age: 30
  }
  console.log('已替换整个对象,视图自动更新')
}
</script>

<style scoped>
.demo-container {
  max-width: 600px;
  margin: 20px auto;
  padding: 20px;
  border: 1px solid #e5e7eb;
  border-radius: 8px;
}

.data-display {
  margin: 20px 0;
  padding: 15px;
  background-color: #f9fafb;
  border-radius: 4px;
}

.button-group {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

button {
  padding: 8px 16px;
  border: none;
  border-radius: 4px;
  background-color: #3b82f6;
  color: white;
  cursor: pointer;
  transition: background-color 0.2s;
}

button:hover {
  background-color: #2563eb;
}
</style>
    

代码说明

  1. 核心逻辑
    • shallowRef 创建了 userInfo 浅层响应式对象
    • 三个按钮分别对应三种更新方式:
      • 仅修改内部属性:视图不更新(shallowRef 特性)
      • 修改内部属性 + triggerRef:手动触发更新,视图刷新
      • 替换整个对象:自动触发更新(shallowRef 会跟踪 .value 赋值)
  2. triggerRef 的作用
    • 强制让 shallowRef 关联的组件重新渲染
    • 即使只修改了对象内部属性,也能通过它让视图同步变化
    • 仅对 shallowRef 有效,对 refreactive 无意义
  3. 适用场景
    • 处理大型数据对象,需要修改内部属性但不想用深层响应式(性能优化)
    • 从非响应式数据源(如第三方库)更新后,需要手动同步视图
    • 批量修改多个内部属性后,一次性触发更新(减少渲染次数)

使用时需注意:triggerRef 是性能优化手段,不应滥用。大多数场景下,优先使用 ref 会更直观(自动追踪内部变化)。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档