【问题标题】:How can i display key value pairs in a table grid in react js.?如何在 React js 中的表格网格中显示键值对?
【发布时间】:2020-03-09 17:32:04
【问题描述】:

我正在尝试在 react js 中显示键值对,

但不知何故我无法正确显示它们。我创建了一个表格小部件,但显示不正确

我的表格小部件

import React from "react";

function Table(props) {
  const { tablevalue } = props;

  console.log(tablevalue);

  return (
    <div className="table">
      <table className="table table-hover">
        <tbody>
          {tablevalue.map((item, value) =>
            Object.entries(item, (key, value) => {
              return (
                <tr className="table-row">
                  <th scope="col" key={`tablevalue-${key}`}>
                    {key}
                  </th>
                  <td key={`tablevalue-${value}`}>{value}</td>
                </tr>
              );
            })
          )}
        </tbody>
      </table>
    </div>
  );
}

export default Table;

app.js

import React, { Fragment } from "react";

import Dropdown from './components/widgets/Dropdown/index'
import Table from './components/widgets/Table/index'

function DropdownTest() {
  return (
      <h3>
        <b>Profit</b>
      </h3>
      <br />
        <Table 
        tablevalue = {[{key:'Binance' , value: 'Polonix'}, {key:'Profit' , value:'Loss'}]}
        />
      </div>

  );
}
export default DropdownTest;

我的输出

而我希望我的输出以表格形式显示

【问题讨论】:

    标签: javascript reactjs html-table widget keyvaluepair


    【解决方案1】:

    你可以使用表头

      <tbody>
        <tr>
          <th>Key</th>
          <th>Value</th>
        </tr>
        {tablevalue.map(({ key, value }) => (
          <tr className="table-row">
            <td key={`tablevalue-${key}`}>{key}</td>
            <td key={`tablevalue-${value}`}>{value}</td>
          </tr>
        ))}
      </tbody>
    

    代码

    const Table = ({ tablevalue }) => (
      <div className="table">
        <table className="table table-hover">
          <tbody>
            <tr>
              <th>Key</th>
              <th>Value</th>
            </tr>
            {tablevalue.map(({ key, value }) => (
              <tr className="table-row">
                <td key={`tablevalue-${key}`}>{key}</td>
                <td key={`tablevalue-${value}`}>{value}</td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>
    );
    
    const DropdownTest = () => (
      <div>
        <h3>
          <b>Profit</b>
        </h3>
        <br />
        <Table
          tablevalue={[
            { key: "Binance", value: "Polonix" },
            { key: "Profit", value: "Loss" }
          ]}
        />
      </div>
    );
    
    ReactDOM.render(
      <React.StrictMode>
        <DropdownTest />
      </React.StrictMode>,
      document.getElementById("root")
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
    <div id="root"></div>

    【讨论】:

      【解决方案2】:

      我还没有看到Object.entries 以这种方式使用过。我通常会在上面使用forEach

      Object.entries(item).forEach(entry => {
        let key = entry[0];
        let value = entry[1];
      });
      

      虽然使用for in 会提高一点性能,但Object.entries 创建一个全新的数组,然后forEach 迭代它,这是不必要的:

      for (const key in item) {
        let value = obj[key];
      }
      

      【讨论】:

        【解决方案3】:

        你可以这样做:

        import React from "react";
        
        export default props => {
          console.log(props.tablevalue);
          const ths = props.tablevalue.map(({ key, value }) => (
            <th key={value}>{key}</th>
          ));
          const values = props.tablevalue.map(obj => <td>{obj.value}</td>);
        
          return (
            <>
              <table>
                <tr>{ths}</tr>
                <tr>{values}</tr>
              </table>
            </>
          );
        };
        

        这是一个显示表格的stackblitz

        归根结底,这一切都取决于您希望该表格如何显示,您可以根据需要调整一些内容。

        【讨论】:

        • 我要根据widget显示
        • 你说的“小部件”是什么意思?
        • 如果您在谈论您的 Table 组件,那么您只需替换该组件内的 jsx。
        【解决方案4】:

        我认为您必须单独创建一个标题。在那个循环之后考虑数据并将css应用于表格行。请找到以下代码。

            import React from 'react';
        import './index.css';
        function Table(props) {
        
            const {
                tablevalue,
            } = props
        
            console.log(tablevalue)
        
            return (
                <div className="table">
                    <table className="table table-hover">
                        <tbody>
                            <tr>
                                <th>Key</th>
                                <th>Value</th>
                            </tr>
                            {tablevalue.map((item, value) => {
                                return (
                                    <tr className="table-row">
                                        <td key={`tablevalue-${value}`}>{item.key}</td>
                                        <td key={`tablevalue-${value}`}>{item.value}</td>
                                    </tr>
                                )
                            })}
                        </tbody>
                    </table>
                </div>
            )
        }
        
        export default Table;
        

        【讨论】:

          【解决方案5】:

          检查此沙盒:https://codesandbox.io/s/goofy-breeze-fdcdr

          Object.keys(tablevalue[0]).map((key) => {key})。您可以在标题 tr 中使用它然后循环它

          将 Table 组件更改为如下所示:

          import React from "react";
          
          function Table(props) {
            const { tablevalue } = props;
            return (
              <div className="table">
                <table className="table table-hover">
                  <tbody>
                    <tr>
                      {Object.keys(tablevalue[0]).map(key => (
                        <th key={key}>{key}</th>
                      ))}
                    </tr>
                    {tablevalue.map(({ key, value }) => (
                      <tr className="table-row" key={`tablevalue-${key}`}>
                        <td>{key}</td>
                        <td>{value}</td>
                      </tr>
                    ))}
                  </tbody>
                </table>
              </div>
            );
          }
          
          export default Table;
          
          

          【讨论】:

            猜你喜欢
            • 2020-07-30
            • 2022-11-19
            • 1970-01-01
            • 2021-09-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多