You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于React+MUI的表格式时间线组件实现思路咨询

表格形式时间线组件实现思路指导

1. 数据预处理

  • 对传入的事件数组按**「年份-月份」**分组:用Array.reduce()遍历数组,通过new Date(item.date)提取年份和月份作为分组key,将同月份的事件归为一组,避免跨年月份重复的问题。
  • 计算每个事件在对应月份内的位置占比:对每个事件,获取它是当月的第几天,除以该月的总天数(可通过new Date(year, month+1, 0).getDate()获取),得到0-1之间的比例,用于后续定位。

2. 表格结构与事件节点布局

  • 用MUI的Table组件搭建基础结构:表头行展示所有涉及的「年份-月份」,表格主体行对应每个月份的单元格。
  • 月份单元格内的事件定位:给每个单元格设置position: relative,事件节点用绝对定位,根据预处理的位置占比设置left: ${比例*100}%,再通过transform: translateX(-50%)让节点居中对齐到对应日期位置,保证事件按日期间距自然分布。
  • 给每个事件节点绑定点击事件,触发选中状态更新。

3. 单选按钮与事件联动

  • 在表格下方构建与月份单元格对应的布局容器:每个容器对应一个月份,内部的单选按钮根据事件的位置占比设置偏移,和上方事件节点对齐。
  • 维护一个selectedEventId状态:点击事件节点时,将该状态设为当前事件的id,同步选中对应的单选按钮;点击单选按钮时,同样更新selectedEventId,实现双向联动。

4. 轮播图切换逻辑

  • 将事件数组转换为以id为key的映射对象(比如const eventMap = Object.fromEntries(events.map(e => [e.id, e]))),方便快速查找选中事件的详情。
  • 轮播图组件监听selectedEventId的变化,从映射对象中取出对应事件数据,切换展示内容。

内容的提问来源于stack exchange,提问作者Yohav Rn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:59:55