美文网首页坚持学习打卡
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