
在 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 将真正响应数据变化,模板中绑定的内容也会实时更新。










