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

Vue 2:如何在循环中按条件递增data属性以获取预期输出?

问题分析与解决方案

原代码的问题在于:在模板中直接调用修改data属性的方法setSr(),Vue的响应式渲染机制会在组件每次更新时重复执行该方法,导致previous(原拼写preivous是笔误)被多次递增,最终输出不符合预期。

最简解决方案(直接满足预期输出)

既然预期的第二个值是i-1,无需额外维护data属性,直接在模板中计算即可:

<!-- 模板部分 -->
<ul>
  <li v-for="i in 5" :key="i">
    {{ i }} {{ i - 1 }}
  </li>
</ul>

不需要修改data和methods,直接就能得到目标输出:

1 0
2 1
3 2
4 3
5 4

若需基于条件递增(扩展场景)

如果后续有复杂条件判断需求,不要在方法中修改全局data,而是通过方法接收参数返回计算值,避免重复执行导致的异常:

// data定义(无需previous)
data() {
  return {}
}

// methods定义
methods: {
  getTargetValue(i) {
    // 这里可以添加自定义条件逻辑,示例返回i-1
    return i - 1;
  }
}

模板调用:

<ul>
  <li v-for="i in 5" :key="i">
    {{ i }} {{ getTargetValue(i) }}
  </li>
</ul>

原代码出错原因

模板中调用修改data的方法会触发组件重新渲染,而重新渲染又会再次调用该方法,形成循环,导致previous被多次累加,最终输出混乱。Vue模板中的表达式应尽量避免有副作用(比如修改data),只做纯计算输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:33:17