动态解析 table 行的数据

Dynamically parse data for table rows

我正在尝试为 table 动态解析数据。到目前为止,我已经尝试了以下方法来显示 table.

  renderTableData = () => {
    return this.props.data.map((item, index) => {
      const { name, value } = item;
      return (
        <tr key={index}>
          <td>{name}</td>
          <td>{value}</td>
        </tr>
      );
    });
  };

这里我对显示的字段值进行了硬编码。我需要它是动态的

完整代码:https://codesandbox.io/s/react-basic-class-component-3kpp5?file=/src/Table.js:0-805

import * as React from "react";

class Table extends React.Component {
  renderTableData = () => {
    return this.props.data.map((item, index) => {
      const { name, value } = item;
      return (
        <tr key={index}>
          <td>{name}</td>
          <td>{value}</td>
        </tr>
      );
    });
  };

  renderTableHeader = () => {
    let header = Object.keys(this.props.data[0]);
    return header.map((key, index) => {
      return <th key={index}>{key.toUpperCase()}</th>;
    });
  };

  render() {
    return (
      <div>
        <table>
          <tbody>
            <tr>{this.renderTableHeader()}</tr>
            {this.renderTableData()}
          </tbody>
        </table>
      </div>
    );
  }
}

export default Table;


您可以使用 Object.entries

遍历对象属性
 renderTableData = () => {
    return this.props.data.map((item, index) => {
      return (
        <tr key={index}>
          {Object.entries(item).map(([key, value])=> <td key={key}>{value}</td>)}
        </tr>
      );
    });
  };

但是,如您所见,您失去了对列顺序的控制。此外,可能还有您不希望显示的列。

您可以通过附加 Object.entries 自定义实现的函数来解决这个问题

<tr key={index}>
  {Object.entries(item)
   .filter(predicateFunction)
   .sort(sortingFunction).map(([key, value])=> <td key={key}>{value}</td>)}
</tr>

或切换到react-data-table