$attrs渲染问题

本文探讨了在前端开发中遇到的数据渲染延迟问题,以及两种解决方案。首先介绍了当父组件触发详情弹窗时,数据加载后再显示弹窗的方式,以及其效果。接着提出更优的方案,即在子组件内部请求数据并渲染,减少视觉上的延迟。此外,还建议在数据不频繁变化时使用$attrs传递静态数据。最后强调了前端开发中的性能优化对于用户体验的重要性。
摘要由CSDN通过智能技术生成
1、父组件
HTML
<a-modal
  v-model="showDetail"
  :title="detailTitle"
  @ok="handleDetailOk"
  :width="1200"
>
  <detail
    ref="detail"
    :detailData="detailData"
    :pointTotal="pointTotal"
  >
  </detail>
</a-modal>
JS
// 点击详情
async handleDetail(item) {
  this.pointTotal = 0
  let data = {...item}
  this.detailTitle = data.years + '详情'
  this.showDetail = true
  let res = await this.$http(this.$url.DEVICE_MANAGE_DETAIL, 'get', {
    years: data.years
  })
  if(res.data.code === 0) {
    this.detailData = res.data.data
    this.detailData.forEach(item => {
      this.pointTotal += (item.shouldNum - item.actualNum) * 10
    })
  }
},
2、子组件
<template>
  <div class="monthDetail">
    <a-table
      :columns="columns"
      :dataSource="$attrs.detailData"
      rowKey="id"
      :pagination="false"
    >
      <template slot="changeNum" slot-scope="text">
          <span>0</span>
        </template>
        <template slot="monthPoint" slot-scope="record">
          {{ (record.shouldNum - record.actualNum) * 10 }}
        </template>
    </a-table>
    <div class="pointBox">
      <span>总分: {{$attrs.pointTotal}}</span>
    </div>
  </div>
</template>
3、问题:点击详情,弹窗出现,数据后面才渲染上去,肉眼可见的数据变动
4、解决1:弹窗先显示,再请求(效果一般,不推荐)
父组件
JS
// 点击详情
async handleDetail(item) {
  this.pointTotal = 0
  let data = {...item}
  this.detailTitle = data.years + '详情'
  this.showDetail = await true
  let res = await this.$http(this.$url.DEVICE_MANAGE_DETAIL, 'get', {
    years: data.years
  })
  if(res.data.code === 0) {
    this.detailData = res.data.data
    this.detailData.forEach(item => {
      this.pointTotal += (item.shouldNum - item.actualNum) * 10
    })
  }
},
5、解决2:在子组件里请求数据渲染,不通过$attrs传值(推荐)
6、拓展:如果不追求完美,并没啥影响,一些隐藏的数据比如下拉框数据,用$attrs传值还是很香的!(建议在没有数据频繁变化时使用)

男人最基本的原则:不动手打女性!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值