Vue 中 ref 变量更新失效的正确写法

10次阅读

Vue 中 ref 变量更新失效的正确写法

vue 3 composition api 中,使用 `ref()` 创建的响应式变量必须通过 `.value` 属性赋值,直接重新赋值 `variant = ref(…)` 会丢失响应性并覆盖原 ref 实例。

你在 axios.get() 的回调中执行了:

variant = Vue.ref(results.data.variants[0]);

这行代码 创建了一个全新的 ref 实例 ,并将其赋值给局部变量 variant,但此时 setup() 函数早已将 初始的 ref(‘ealjapd’) 实例 返回给了模板(如 {{variant}} 或 :value=”variant”)。新创建的 ref 并未被 Vue 响应式系统追踪,也未暴露给组件上下文,因此视图不会更新,且原始 variant 引用已失效。

✅ 正确做法是:复用已声明的 ref 实例,仅更新其 .value

? 关键要点:

立即学习 前端免费学习笔记(深入)”;

  • ref() 返回的是一个 响应式对象,其内部值存储在 .value 属性中;
  • 在同步代码中可直接读取 variant.value,在模板中 Vue 会自动解包(如 {{variant}} 等价于 {{variant.value}});
  • 切勿 用 = 重新赋值 ref 变量(如 variant = ref(…)),否则破坏响应式连接;
  • 建议在异步操作中添加 .catch() 处理请求失败,避免 variant.value 保持旧值或变为 undefined;
  • 若 variants[0] 可能不存在,建议增加空值检查:results.data.variants?.[0]。

这样修改后,variant 将真正响应数据变化,模板中绑定的内容也会实时更新。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-28发表,共计1341字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources