背景

在前端构建表格时,如果表格中的列非常多,特别是多到横轴需要滚动的情况下,用户使用起来就会非常不便。

目标

提供动态更改表格列的功能,让用户可以自由选择当前显示哪些列。

至少包含以下 2 点:

  1. 支持多级列配置,所以必须是一个树选择。
  2. 支持保存到 localStorage,也需要支持不保存。

    设计

    三种数据

    核心逻辑是处理好 2 个核心数据与多个中间数据之间的关系:

  3. 2 个核心数据

    1. defaultColumns。默认的列。可以理解为:加入没有这个动态更改机制,当前表格应该显示的列。
    2. displayColumns。显示的列。经过动态更改机制后,当前表格显示的列。
  4. n 个中间数据
    1. treeData。要将列数据转换为树选择器的依赖数据。
    2. notDisplayColumnKeys。
      1. 因为要存储在 localStorage 中,要尽可能简单,因此使用 keys 存储。
      2. 之后会更详细介绍为什么需要反向存储(not display)。

        隐藏列的方式

        以 Antd Table 组件为例,隐藏列的方式有 2 种,一种是直接修改 columns 配置

        树选择器额外功能:多选、反选、搜索(高亮)

        实现