vue调用组件遇到的坑

今天再用element-ui的el-tab调用不同的组件时遇到一个奇怪的问题,

上述图片中,一个组件被重复渲染了多次,代码如下:

<el-tabs ref="tabRef" v-model="activeName" @tab-click="handleClick">
      <el-tab-pane
        v-for="item in options.tabs"
        :key="item.name"
        :label="item.label"
        :name="item.name"
      >
        <!-- <keep-alive>
          <div :is="item.name"></div>
        </keep-alive> -->

        <QualificationDetail v-if="activeName == 'QualificationDetail'" :isEdit="item.isEdit" />
        <WarehousingDetail v-if="activeName == 'WarehousingDetail'" />
        <AuditProcess v-if="activeName == 'AuditProcess'" />
        <SampleRegist v-if="activeName == 'SampleRegist'"></SampleRegist>
        <SampleRegistDetail v-if="activeName == 'SampleRegistDetail'"></SampleRegistDetail>
        <InspectRegist v-if="activeName == 'InspectRegist'" v-on="$listeners"></InspectRegist>
        <InspectRegistDetail v-if="activeName == 'InspectRegistDetail'"></InspectRegistDetail>
        <InspectReview v-if="activeName == 'InspectReview'" :isEdit="item.isEdit"></InspectReview>
      </el-tab-pane>
    </el-tabs>

虽然上述代码没有问题,没有报错,但是这样明显是不对的,查询了下,然后做了改正:

<el-tabs ref="tabRef" v-model="activeName" @tab-click="handleClick">
      <el-tab-pane
        v-for="item in options.tabs"
        :key="item.name"
        :label="item.label"
        :name="item.name"
      >
        <keep-alive>
          <div :is="item.name"></div>
        </keep-alive>
      </el-tab-pane>
    </el-tabs>

这样DOM树渲染就正常了,

原因是:使用v-if会本身就会造成多次渲染

看了下官网解释的很好,给出的例子也很好:https://cn.vuejs.org/v2/guide/components-dynamic-async.html

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值