vue 死循环 loop function

博客讨论了在Vue中遇到的死循环问题,原因是模板中的span元素动态绑定data中的stateColor,并通过子元素内的函数改变其状态,触发双向绑定的无限循环。解决方案是避免在子组件中直接修改父组件的数据,以防止不必要的模板重新渲染和潜在的性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<el-table-column
        prop="state"
        label="提取状态"
        width="384"
        align="center"
        class-name="bugAwardClass"
      >
        <template slot-scope="scope">
          <!-- bug -->
          <span
            :style="{
              color: stateColor,
            }"
            >{{ formatState(scope.row.state) }}</span
          >
        </template>
      </el-table-column>



data() {
    return {
      stateColor: "",
    };
  },

//把state转化为文字带颜色
    formatState(state) {
      //状态(0/审核不通过,1/待审核,2/审核通过)
      // let currentText = "xxx";
      // switch (state) {
      //   case 0:
      //     this.stateColor = 'xxx';
      //     currentText = 'xxx';
      //     break;
      //   case 1:
      //     this.stateColor = 'xxx';
      //     currentText = 'xxx';
      //     break;
      //   case 2:
      //     this.stateColor = 'xxx';
      //     currentText = 'xxx';
      //     break;
      //   default:
      //     break;
      // }

      return currentText ;
    },

vue中死循环的bug
因为在模板中span标签绑定了一个动态的class并且这个动态的class是绑定在data数据中的stateColor,span标签下的span标签绑定了一个函数,这个函数里面改变了stateColor的状态,这就是死循环的原因了。
vue模型是双向绑定的,一开始模板渲染的时候就会给父span元素绑定stateColor,然后子span元素通过了函数改变了stateColor的状态,那么vue就会通知模板重新渲染这个span元素,但是当这个父span重新渲染的时候,他的子span也会跟着重新渲染。

vue的模板渲染也是有判断的,如果你修改的stateColor = ‘ 1 ’ ,那么vue还是会判断模板渲不渲染的,不会重新渲染。

我这里会出现死循环的原因是,我这是table,他会有很多行都绑定了stateColor ,那么当其中一个stateColor 改变了,那么其他table行的stateColor 都会被通知重新渲染的。就是说只要有不同颜色,或者说不同变量的stateColor ,那么就会死循环触发这个函数。还有一个就是vue是按顺序来的,前面其中一个stateColor 和后面一个stateColor 只要不同,那么就会重新通知所有绑定stateColor的重新渲染,这就是死循环了。

总结:就是不要在子标签中需要改父标签已经绑定的data变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值