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

Vue3数据变更后页面未重新渲染问题求助

Vue3 CDN模式下数组变更页面不更新的问题解决

你当前的问题是普通数组无法触发Vue的响应式更新:你定义的items是原生JS数组,没有被Vue的响应式系统处理,所以即使定时器里执行push添加了新元素,Vue无法追踪到这个变化,页面也就不会重新渲染。

错误核心

  • title用ref()包裹后成为响应式对象,修改它会触发页面更新
  • items是普通数组,不在Vue的响应式追踪范围内,任何修改都不会同步到视图

解决方案1:用ref()包裹数组

把数组用ref()包裹,转为响应式对象,修改时通过.value访问原数组:

const { createApp, ref } = Vue;

createApp({
  setup() {
    const title = ref('Fruits');
    // 用ref包裹数组,转为响应式对象
    const items = ref(['apple', 'orange', 'banana']);

    setTimeout(() => {
      // ref包裹的数组需通过.value操作原数组
      items.value.push('grapes');
    }, 4000);

    return { title, items };
  }
}).mount('#app');

解决方案2:用reactive()管理响应式状态

如果习惯用对象统一管理数据,可以把数组放在reactive创建的响应式对象中:

const { createApp, reactive, toRefs } = Vue;

createApp({
  setup() {
    const title = ref('Fruits');
    // 创建包含数组的响应式对象
    const state = reactive({
      items: ['apple', 'orange', 'banana']
    });

    setTimeout(() => {
      // 直接操作响应式对象中的数组
      state.items.push('grapes');
    }, 4000);

    // 用toRefs解构,方便模板直接使用items
    return { title, ...toRefs(state) };
  }
}).mount('#app');

补充说明

Vue3的响应式系统基于Proxy实现,只有被ref或reactive处理过的数据,才能被Vue追踪变化并自动更新视图。原生JS数组的修改操作(如push、pop、splice等),只有在数组是响应式对象时,才会触发视图更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:15:21