el-table加了key导致页面滚动位置异常?这个优化方案让用户体验直线提升!

一、需求背景

最近在做需求的时候,发现切换列表的时候,页面会默认跳转到网页的中间部分,但是我的列表是在下面的位置,这就需要用户切换列表后,再手动滑下去🤔 用户体验并不友好。具体表现如下:

==虽然不是什么大问题,体验上总怪怪的

二、原因定位

最后原因是代码上el-table加了key,因为产品prd是用el-radio-group模拟了el-tabs的切换功能,所以列表的数据是要动态加载的,又要维持默认的排序,所以给el-table加上了key。让表格重新渲染来恢复默认的排序规则,拿到正确的数据。。。

less 复制代码
  <el-table 
        :key='riskLevel' //注意这个key
        :data="list"
        border
        :defaultSort="{ order: 'descending', prop: 'alterDeviceTotal' }"
        @sort-change="onSortChange"
      >

如果去掉key,影响就是切换radio的地区后,排序没能更新。

所以优化上,通过添加ref来操作表格元素,用户切换radio后,清除现有排序、再恢复默认排序规则即可,这样组件不会重新渲染,只是数据上的调整,页面就不会跳到中间去了。

ini 复制代码
  <div class="area-table">
      <div class="table-header">
        <el-radio-group v-model="areaLevel" @change="handleAreaLevelChange">
          <el-radio v-for="item in areaLevelOptions" :key="item.value" :label="item.value">
            {{ item.label }}
          </el-radio>
        </el-radio-group>
      </div>
      <el-table
        ref="tableRef"
        :data="list"
        border
        :defaultSort="{ order: 'descending', prop: 'alterDeviceTotal' }"
        @sort-change="onSortChange"
      >
        <el-table-column
          v-for="column in tableColumns"
          :key="column.prop"
          :prop="column.prop"
          :label="column.label"
          :width="column.width"
          :minWidth="column.minWidth"
          :sortable="column.sortable"
        >
          <template #default="{ row }">
            <span v-if="column.prop === 'rate'">{{ row.rate }}%</span>
          </template>
        </el-table-column>
      </el-table>
      <Paginations
        :totalCount="pages.totalCount"
        :pageNumber="pages.pageNumber"
        :pageSize="pages.pageSize"
        @load-more="onPaginationsChange"
      />
    </div>

ref清除排序&添加默认排序

javascript 复制代码
// 处理区域级别变化-重置表格排序状态并设置默认排序
const handleAreaLevelChange = (value) => {
  tableRef.value.clearSort();
  tableRef.value.sort('alterDeviceTotal', 'descending'); // 手动设置默认排序状态-会触发onSortChange去重新获取数据
};

也就是一个思路吧,看看滚动异常的时候 是不是因为表格加了key

相关推荐
roman_日积跬步-终至千里3 小时前
【系统架构设计(25)】Web应用服务器与现代架构
前端·架构·系统架构
yshhuang3 小时前
在Windows上搭建开发环境
前端·后端
littleplayer4 小时前
Redux在iOS中的使用
前端
跟橙姐学代码4 小时前
Python里的“管家婆”:带你玩转os库的所有神操作
前端·python·ipython
jingling5554 小时前
uniapp | 快速上手ThorUI组件
前端·笔记·前端框架·uni-app
UrbanJazzerati4 小时前
可拖拽的进度条组件实战:实现思路与Demo
前端·面试
Cache技术分享4 小时前
188. Java 异常 - Java 异常处理规范
前端·后端
不一样的少年_4 小时前
Vue3 后台分页写腻了?我用 1 个 Hook 删掉 90% 重复代码(附源码)
前端·vue.js·设计模式
一枚前端小能手4 小时前
🔥 滚动监听写到手抽筋?IntersectionObserver让你躺平实现懒加载
前端·javascript
我是日安4 小时前
从零到一打造 Vue3 响应式系统 Day 5 - 核心概念:单向链表、双向链表
前端·vue.js