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

如何使用react-data-grid创建动态列并绑定设备值

React Data Grid 设备数据列绑定解决方案

问题背景

已有dailyLogsData日志数据,需将每个device_name作为列展示,对应device_value填充到对应行中。现有代码已生成设备列,但未将设备值绑定到行数据,导致设备列无内容。

解决方案

核心是在生成行数据时,将每个设备的键值对合并到行对象中,确保列key与行数据属性名完全匹配。

修改后的完整代码

import DataGrid from 'react-data-grid';

const dailyLogsData = [
  {
    id: 1,
    date_created: "01/15/2023",
    time_updated: "15:53:05",
    usage_notes: "sample notes",
    maintenance_notes: "sample notes",
    devices: [
      { device_name: "Port Engine", device_value: "0125", device_id: 1 },
      { device_name: "Generator", device_value: "0252", device_id: 2 },
      { device_name: "Water Maker", device_value: "0321", device_id: 3 },
      { device_name: "Fuel Engine", device_value: "", device_id: 4 },
      { device_name: "Radiator", device_value: "", device_id: 5 },
    ],
  },
  {
    id: 2,
    date_created: "01/16/2023",
    time_updated: "15:53:05",
    usage_notes: "sample notes",
    maintenance_notes: "sample notes",
    devices: [
      { device_name: "Port Engine", device_value: "0125", device_id: 1 },
      { device_name: "Generator", device_value: "0252", device_id: 2 },
      { device_name: "Water Maker", device_value: "0321", device_id: 3 },
      { device_name: "Fuel Engine", device_value: "0321", device_id: 4 },
      { device_name: "Radiator", device_value: "0321", device_id: 5 },
    ],
  },
];

const YourComponent = () => {
  // 生成设备列(原有逻辑保持不变)
  const columns = dailyLogsData[0].devices.map((item) => ({
    key: item.device_name.replace(/ /g, ""),
    name: item.device_name.toUpperCase(),
  }));

  // 合并基础列与设备列(原有逻辑保持不变)
  const columns2 = [
    { key: "id", name: "ID" },
    { key: "date_time", name: "DATE/TIME" },
    { key: "usage_notes", name: "USAGE NOTES" },
    { key: "maintenance_notes", name: "MAINTENANCE NOTES" },
    ...columns,
  ];

  // 修改行数据生成逻辑:合并设备值到行对象
  const rows = dailyLogsData.map((item) => ({
    id: item.id,
    date_time: `${item.date_created} | ${item.time_updated}`,
    usage_notes: item.usage_notes,
    maintenance_notes: item.maintenance_notes,
    // 将设备数组转为键值对,键为去除空格的device_name,值为device_value
    ...Object.fromEntries(
      item.devices.map(device => [
        device.device_name.replace(/ /g, ""),
        device.device_value
      ])
    )
  }));

  return (
    <DataGrid columns={columns2} rows={rows} />
  );
};

export default YourComponent;

关键说明

  • 利用Object.fromEntries()将设备数组转换为键值对对象,键名与列定义的key完全匹配(去除空格的device_name),确保React Data Grid能正确匹配列与行数据。
  • 保持原有列生成逻辑不变,仅修改行数据的生成,保证列与行数据的属性名一一对应。

内容的提问来源于stack exchange,提问作者Edmar Sanchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:48