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

Vue.js中v-for循环内动态传递prop给组件无法渲染的问题排查与解决

Vue组件v-for渲染无输出且无报错的解决办法

我刚碰到过几乎一模一样的问题,分享下我的排查和解决过程:

问题复现

我在Vue组件的data选项里初始化了一个空数组sheets,点击按钮会往数组里push新元素:

data() {
  return {
    sheets: []
  };
}

然后在模板里用v-for遍历这个数组,渲染自定义的Card组件并传入数据:

<div id="sheets">
  <template v-for="c in sheets">
    <Card :info="c"/>
  </template>
</div>

结果就很诡异——不管数组里有多少元素,Card组件一个都不渲染,控制台也没任何错误提示。但换成用普通的<span>渲染数据,就完全正常:

<div id="sheets">
  <template v-for="c in sheets">
    <span>{{c}}</span>
  </template>
</div>

问题根源排查

折腾了半天,最后发现问题出在Card组件内部:我在组件的created()钩子函数里对传入的info prop做了一些数据处理操作。

为什么这会导致组件不渲染呢?因为created钩子执行时,组件的DOM还没挂载完成,如果在这个阶段对prop数据的操作涉及到依赖DOM的逻辑,或者操作过程中意外干扰了组件的初始化状态,就会让组件无法完成渲染,但又不会触发明显的报错(Vue在这个阶段的某些隐性错误不会直接打在控制台)。

解决办法

把Card组件里created()钩子中处理info prop的代码,迁移到mounted()钩子函数里就搞定了!

因为mounted钩子执行时,组件已经完成了DOM挂载,此时再处理传入的prop数据,不会影响组件的正常渲染流程,v-for就能正确渲染出每个Card组件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:47:45