如何使用 react-data-grid 创建动态列

huangapple go评论143阅读模式
英文:

How to create dynamic column using react-data-grid

问题

以下是您要翻译的内容:

我在我的React应用中有一个LogsData:

  1. const dailyLogsData = [
  2. {
  3. id: 1,
  4. date_created: "01/15/2023",
  5. time_updated: "15:53:05",
  6. usage_notes: "sample notes",
  7. maintenance_notes: "sample notes",
  8. devices: [
  9. { device_name: "Port Engine", device_value: "0125", device_id: 1 },
  10. { device_name: "Generator", device_value: "0252", device_id: 2 },
  11. { device_name: "Water Maker", device_value: "0321", device_id: 3 },
  12. { device_name: "Fuel Engine", device_value: "", device_id: 4 },
  13. { device_name: "Radiator", device_value: "", device_id: 5 },
  14. ],
  15. },
  16. {
  17. id: 2,
  18. date_created: "01/16/2023",
  19. time_updated: "15:53:05",
  20. usage_notes: "sample notes",
  21. maintenance_notes: "sample notes",
  22. devices: [
  23. { device_name: "Port Engine", device_value: "0125", device_id: 1 },
  24. { device_name: "Generator", device_value: "0252", device_id: 2 },
  25. { device_name: "Water Maker", device_value: "0321", device_id: 3 },
  26. { device_name: "Fuel Engine", device_value: "0321", device_id: 4 },
  27. { device_name: "Radiator", device_value: "0321", device_id: 5 },
  28. ],
  29. },
  30. ];

我想在列中显示每个设备的名称,设备值应该在行中。

我有一个简单的解决方案,但我不知道如何获取每个设备的设备值:

  1. const columns = dailyLogsData[0].devices.map((item) => ({
  2. key: item.device_name.replace(/ /g, ""),
  3. name: item.device_name.toUpperCase(),
  4. }));
  5. const columns2 = [
  6. { key: "id", name: "ID" },
  7. { key: "date_time", name: "DATE/TIME" },
  8. { key: "usage_notes", name: "USAGE NOTES" },
  9. { key: "maintenance_notes", name: "MAINTENANCE NOTES" },
  10. ...columns,
  11. ];
  12. const rows = dailyLogsData.map((item) => ({
  13. id: item.id,
  14. date_time: `${item.date_created} | ${item.time_updated}`,
  15. usage_notes: item.usage_notes,
  16. maintenance_notes: item.maintenance_notes,
  17. }));
  18. return(
  19. <DataGrid columns={columns2} rows={rows} />
  20. )

到目前为止的输出如下所示:

示例输出

我正在使用这个NPM包获取额外信息:react-data-grid

英文:

I have a LogsData in my react App:

  1. const dailyLogsData = [
  2. {
  3. id: 1,
  4. date_created: &quot;01/15/2023&quot;,
  5. time_updated: &quot;15:53:05&quot;,
  6. usage_notes: &quot;sample notes&quot;,
  7. maintenance_notes: &quot;sample notes&quot;,
  8. devices: [
  9. { device_name: &quot;Port Engine&quot;, device_value: &quot;0125&quot;, device_id: 1 },
  10. { device_name: &quot;Generator&quot;, device_value: &quot;0252&quot;, device_id: 2 },
  11. { device_name: &quot;Water Maker&quot;, device_value: &quot;0321&quot;, device_id: 3 },
  12. { device_name: &quot;Fuel Engine&quot;, device_value: &quot;&quot;, device_id: 4 },
  13. { device_name: &quot;Radiator&quot;, device_value: &quot;&quot;, device_id: 5 },
  14. ],
  15. },
  16. {
  17. id: 2,
  18. date_created: &quot;01/16/2023&quot;,
  19. time_updated: &quot;15:53:05&quot;,
  20. usage_notes: &quot;sample notes&quot;,
  21. maintenance_notes: &quot;sample notes&quot;,
  22. devices: [
  23. { device_name: &quot;Port Engine&quot;, device_value: &quot;0125&quot;, device_id: 1 },
  24. { device_name: &quot;Generator&quot;, device_value: &quot;0252&quot;, device_id: 2 },
  25. { device_name: &quot;Water Maker&quot;, device_value: &quot;0321&quot;, device_id: 3 },
  26. { device_name: &quot;Fuel Engine&quot;, device_value: &quot;0321&quot;, device_id: 4 },
  27. { device_name: &quot;Radiator&quot;, device_value: &quot;0321&quot;, device_id: 5 },
  28. ],
  29. },
  30. ];

And I want to display each device name in a column and the device value should be in the row.

I have a simple solution, but I do not know how to get the device value for each device

  1. const columns = dailyLogsData[0].devices.map((item) =&gt; ({
  2. key: item.device_name.replace(/ /g, &quot;&quot;),
  3. name: item.device_name.toUpperCase(),
  4. }));
  5. const columns2 = [
  6. { key: &quot;id&quot;, name: &quot;ID&quot; },
  7. { key: &quot;date_time&quot;, name: &quot;DATE/TIME&quot; },
  8. { key: &quot;usage_notes&quot;, name: &quot;USAGE NOTES&quot; },
  9. { key: &quot;maintenance_notes&quot;, name: &quot;MAINTENANCE NOTES&quot; },
  10. ...columns,
  11. ];
  12. const rows = dailyLogsData.map((item) =&gt; ({
  13. id: item.id,
  14. date_time: `${item.date_created} | ${item.time_updated}`,
  15. usage_notes: item.usage_notes,
  16. maintenance_notes: item.maintenance_notes,
  17. }));
  18. return(
  19. &lt;DataGrid columns={columns2} rows={rows} /&gt;
  20. )

Here is the output so far:

Sample Output

I am using this NPM Package for additional info: react-data-grid

答案1

得分: 0

你可以按以下方式创建一个多重映射函数:

  1. const rows = dailyLogsData.map((item) => {
  2. const row = {
  3. id: item.id,
  4. date_time: `${item.date_created} | ${item.time_updated}`,
  5. usage_notes: item.usage_notes,
  6. maintenance_notes: item.maintenance_notes,
  7. };
  8. item.devices.forEach((device) => {
  9. row[device.device_name.replace(/ /g, "")] = device.device_value;
  10. });
  11. return row;
  12. });
英文:

You can create a multiple map function as below here:

  1. const rows = dailyLogsData.map((item) =&gt; {
  2. const row = {
  3. id: item.id,
  4. date_time: `${item.date_created} | ${item.time_updated}`,
  5. usage_notes: item.usage_notes,
  6. maintenance_notes: item.maintenance_notes,
  7. };
  8. item.devices.forEach((device) =&gt; {
  9. row[device.device_name.replace(/ /g, &quot;&quot;)] = device.device_value;
  10. });
  11. return row;
  12. });
  13. ``
  14. </details>

huangapple
  • 本文由 发表于 2023年6月8日 23:15:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/76433348.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定