美文网首页坚持学习打卡
VUE,element-ui,优化tabs组件每次点击,所有子页

VUE,element-ui,优化tabs组件每次点击,所有子页

作者: Moment929 | 来源:发表于2023-03-11 00:13 被阅读0次

优化tabs组件每次点击,所有子页面都重新渲染问题

<el-tabs v-model="activeName" type="border-card" @tab-click="handleClick" class="report">
      <el-tab-pane name="first">
        <span slot="label"> 概述 </span>
        <overview></overview>
      </el-tab-pane>
      <el-tab-pane name="second">
        <span slot="label"> 版本信息 </span>
        <versionInfo></versionInfo>
      </el-tab-pane>
      <el-tab-pane name="third">
        <span slot="label"> 游戏信息 </span>
        <gameInfo></gameInfo>
      </el-tab-pane>
      <el-tab-pane name="fourth">
        <span slot="label"> 结论描述 </span>
        <conclusion></conclusion>
      </el-tab-pane>
      <el-tab-pane name="fifth">
        <span slot="label"> 测试项目 </span>
        <testProject></testProject>
      </el-tab-pane>
      <el-tab-pane name="sixth">
        <span slot="label"> 问题明细 </span>
        <problemDetail></problemDetail>
      </el-tab-pane>
      <el-tab-pane name="seventh">
        <span slot="label"> 安全问题汇总 </span>
        <securityIssues></securityIssues>
      </el-tab-pane>
    </el-tabs>

在element-ui的tabs组件中,我们发现每次切换页面,所有的子组件都会重新渲染一次。当子页面需要发送数据请求并且子页面过多时,这样会过多的占用网络资源。这里我们可以使用v-if来进行判断是否渲染该子页面。

<el-tabs v-model="activeName" type="border-card" @tab-click="handleClick" class="report">
      <el-tab-pane
        v-for="(pages, index) in pages"
        v-bind:key="index"
        :label="pages.label"
        :name="pages.name">
        <component :is="pages.name" v-if="pages.name == nowPage"></component>
      </el-tab-pane>
    </el-tabs>
<script>
import overview from './components/Overview'
import versionInfo from './components/VersionInfo'
import gameInfo from './components/GameInfo'
import conclusion from './components/Conclusion'
import testProject from './components/TestProject'
import problemDetail from './components/ProblemDetail'
import securityIssues from './components/SecurityIssues'
export default {
  components: { 
    overview,
    versionInfo, 
    gameInfo,
    conclusion,
    testProject,
    problemDetail,
    securityIssues
  },
  data() {
    return {
      activeName: 'overview',
      nowPage: 'overview',
      pages: [{
        name: 'overview',
        label: '概述'
      },{
        name: 'versionInfo',
        label: '版本信息'
      },{
        name: 'gameInfo',
        label: '游戏信息'
      },{
        name: 'conclusion',
        label: '结论描述'
      },{
        name: 'testProject',
        label: '测试项目'
      },{
        name: 'problemDetail',
        label: '问题明细'
      },{
        name: 'securityIssues',
        label: '安全问题汇总'
      },]
    }
  },
  methods: {
    handleClick(tab, event) {
      this.nowPage = tab.name
    }
  }
}
</script>

//////////////////////////////////////////////////
之后又有新的问题继续更新

vue让子组件刷新的方法

<component :is="pages.name" v-if="pages.name == nowPage" :key="codeNum"></component>
初始化codeNum:new Date().getTime()
我们只需要去改变codeNum就会让组件重新刷新
需要的时候重新去给codeNum赋值就可以了

相关文章

网友评论

    本文标题:VUE,element-ui,优化tabs组件每次点击,所有子页

    本文链接:https://www.haomeiwen.com/subject/roqmvrtx.html