You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3中使用ref为何无法实现响应式?问题排查与修复

问题:Vue中修改ref值后页面不更新

尝试点击按钮修改ref定义的value值,控制台显示值已变更,但Vue页面并未更新该值。代码示例如下:

<script setup>
import { ref } from 'vue'
let value = ref(false);
function update() {
    value =! value
    console.log(value); // 控制台显示值已变更
}
</script>
<template>
  <button @click="update">UPDATE</button>
  <p>
    {{ value }} - 页面未更新
  </p>
</template>

错误原因

你直接覆盖了ref()创建的响应式包装对象。ref()返回的是一个包含.value属性的响应式对象,当你执行value = !value时,相当于把原本的响应式对象替换成了普通布尔值,模板绑定的还是最初的响应式对象,因此页面不会更新。控制台打印的是新的普通值,所以看起来“变更了”,但和模板关联的已经不是同一个变量了。

修复方案

必须通过修改ref对象的.value属性来更新响应式值,不能直接替换整个变量。修改后的代码如下:

<script setup>
import { ref } from 'vue'
let value = ref(false);
function update() {
    value.value = !value.value
    console.log(value.value);
}
</script>
<template>
  <button @click="update">UPDATE</button>
  <p>
    {{ value }} - 现在可以正常更新
  </p>
</template>

内容的提问来源于stack exchange,提问作者Pavel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:45:07