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

相关推荐
gongzemin25 分钟前
前端根据文件流渲染 PDF 和 DOCX 文件
前端·vue.js·express
jsonchao1 小时前
大厂失业后,我用cursor开发了第二款海外产品
前端·程序员
gnip1 小时前
低代码平台自定义组件实现思路
前端·低代码
实习生小黄1 小时前
基于扫描算法获取psd图层轮廓
前端·javascript·算法
青松学前端1 小时前
你不知道的秘密-axios源码
前端·javascript
GISer_Jing1 小时前
IntersectionObserver API&应用场景&示例代码详解
前端·javascript
未来之窗软件服务1 小时前
学校住宿缴费系统h5-——东方仙盟——仙盟创梦IDE
前端·javascript·ide·仙盟创梦ide·东方仙盟
markyankee1011 小时前
JavaScript 作用域与闭包详解
前端·javascript
gufs镜像1 小时前
Swift学习总结——使用Playground
前端·ios·面试
高冷的小明1 小时前
React-Find 一款能快速在网页定位到源码的工具,支持React19.x/next 15
前端·javascript·react.js