原生table实现矩阵展示打勾功能

简介: 原生table实现矩阵展示打勾功能

需求设计

定义数据格式

[
        [
            {
                "flag": "false",
                "id": "96aea64d-5014-4479-98bd-64eac444e64a",
                "value": "尺码/颜色"
            },
            {
                "flag": "false",
                "id": "9cf8e371-8738-4c61-acb4-a80b036bc44e",
                "value": "黑色/8056"
            },
            {
                "flag": "false",
                "id": "60c009b3-b215-4761-acd4-77cd080c5e9a",
                "value": "秘釉色7475"
            }
        ],
        [
            {
                "flag": "false",
                "id": "cf606eae-f535-48a0-a5d6-566979699a2d",
                "value": "165"
            },
            {
                "flag": "false",
                "id": "3b868f1d-9dbf-4d55-acc7-eb170f071af7",
                "value": ""
            },
            {
                "flag": "false",
                "id": "e5b4f621-f03b-4079-b34d-d99952764e00",
                "value": ""
            }
        ],
        [
            {
                "flag": "false",
                "id": "a17a855b-8a3b-4202-813f-52a39dd6b183",
                "value": "170"
            },
            {
                "flag": "false",
                "id": "204885f5-c786-4dfa-a949-3beb873d8b1f",
                "value": ""
            },
            {
                "flag": "false",
                "id": "de183b17-8971-4735-9b03-0e9169bf672b",
                "value": ""
            }
        ],
        [
            {
                "flag": "false",
                "id": "91923b21-bdaa-45fa-bf49-89286fefda75",
                "value": "175"
            },
            {
                "flag": "false",
                "id": "9c3d73f8-b693-48fa-93b4-d36b43862728",
                "value": ""
            },
            {
                "flag": "false",
                "id": "d578b782-0494-4223-9b5e-22106e7316f3",
                "value": ""
            }
        ],
        [
            {
                "flag": "false",
                "id": "94a7a2c9-2f26-4bd5-83f8-7b3c691e9bef",
                "value": "160"
            },
            {
                "flag": "false",
                "id": "b4a89ad8-2e35-4687-92e8-9b2b2b0206c9",
                "value": ""
            },
            {
                "flag": "false",
                "id": "1ad8ca10-089a-4719-9782-b0f84e3c7dcd",
                "value": ""
            }
        ],
        [
            {
                "flag": "false",
                "id": "2d5fcd60-cf7b-4bf7-bcd9-3cc9d91189d0",
                "value": "155"
            },
            {
                "flag": "false",
                "id": "370e5ebf-3db5-4ce5-bfe6-8eb97601c27a",
                "value": ""
            },
            {
                "flag": "false",
                "id": "a5654806-808a-469b-94e1-29d2fe6b2e28",
                "value": ""
            }
        ]
    ]

紧接着就是数据处理两层循环

<table style={{ border: "1px solid #ccc" }}>
            {dataListTest && dataListTest.map((outer: any, index: any) => (
              <tr>
                {outer && outer.map((inner: any, num: any) => {
                  if (num == 0 || index == 0) {
                    return <th style={{ width: "5%", border: "1px solid #ccc", }}>{inner.value}</th>
                  } else {
                    return <th onClick={() => handleClick(inner)} style={{
                      width: "5%", border: "1px solid #ccc",
                    }}>{inner.flag ? "✔" : inner.value}</th>
                  }
                })}
              </tr>
            ))}
          </table>


需要进行两层循环 然后三元用来判断是否打勾 (num == 0 || index == 0)控制第一行和 第一列不可以点击


处理方法

const handleClick = (test: any) => {
    var dataList = JSON.parse(JSON.stringify(dataListTest))
    for (const outer of dataList) {
      for (const inner of outer) {
        if (inner.id == test.id) {
          inner.flag = !inner.flag
        }
      }
    }
    console.log(dataList, "dataChange")
    setDataListTest(dataList)
  }



通过flag的true和false切换控制打勾


运行结果

总结

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 一起学习前端知识




相关文章
|
存储 SQL 开发框架
可视化查询(sp_helptext)——快速查询包含指定字符串的存储过程(附源码)
可视化查询(sp_helptext)——快速查询包含指定字符串的存储过程(附源码)
|
6月前
|
域名解析 缓存 前端开发
函数计算产品使用问题之添加的插件中只有部分显示成功,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
原生表格-滚动-合并功能
原生表格-滚动-合并功能
|
JSON JavaScript 前端开发
VUE element-ui之table表格前端自动过滤(筛选),不调用数据接口筛选表格,方法
VUE element-ui之table表格前端自动过滤(筛选),不调用数据接口筛选表格,方法
1158 0
VUE element-ui之table表格前端自动过滤(筛选),不调用数据接口筛选表格,方法
30EasyUI 数据网格- 创建列组合
30EasyUI 数据网格- 创建列组合
38 0
|
数据库
22EasyUI 数据网格- 添加查询功能
22EasyUI 数据网格- 添加查询功能
49 0
|
前端开发 容器
41EasyUI 数据网格- 扩展行显示细节
41EasyUI 数据网格- 扩展行显示细节
54 0
|
容器
Echarts实战案例代码(30):同一个id空间Tab按钮显示不同图表防止叠加的解决方案
Echarts实战案例代码(30):同一个id空间Tab按钮显示不同图表防止叠加的解决方案
104 0
|
缓存 自然语言处理 Swift
本周推荐 | 表达式引擎的组合子实现方案
推荐语:本文清晰而详细地介绍了如何使用 Parser 组合子方案,结合 Monad 通过合理的分层、抽象和组合,在性能达标的情况下实现消息场景中函数式的表达式解析。非常具有实践意义,推荐阅读学习! ——大淘宝技术终端开发工程师 闲行
273 0
本周推荐 | 表达式引擎的组合子实现方案
|
前端开发 API
基于elementUI table组件实现自定义列,宽度,排序并联动同步
哈喽,大家好又是我。昨天有个人在群里问:“基于 elementUI 如何实现拖动修改列宽度,并同步在多个表格中”。 这个功能其实听常见的,在不同的使用者眼中关注点就应该是不一样的。比如: 项目的主管,更关心进度 前端开发,关心设计稿、接口什么时候提供 后端开发,关心前端什么时候写完,什么时候联调 测试人员,关心什么时候提测,以及对应人员是谁 我们的目的是:针对于不同的人群,显示不同的字段,不同的排序规则(index、fixed)。那好,我们先来分析一下实现这样的功能都需要做什么。
1398 0
基于elementUI table组件实现自定义列,宽度,排序并联动同步