【问题标题】:How to create a Table from lists using ReactJS?如何使用 ReactJS 从列表中创建表格?
【发布时间】:2019-05-23 20:12:53
【问题描述】:

我的目标是使用 ReactJS 从行列表 ([1, 2, 3]) 和列列表 ([1, 2]) 创建以下 html 表:

<table>
<tr>
 <td>1</td>
 <td>2</td>
 </tr>
 <tr>
  <td>1</td>
 <td>2</td>
 </tr>
  <tr>
   <td>1</td>
   <td>2</td>
  </tr>
</table>

请参阅下面的我的 React 脚本和这里的 my codepen,这似乎不起作用

 class Tbody extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          columns: [1, 2],
          rows: [1, 2, 3]
        };
      }

      renderCols() {
        return (
          {this.state.columns.map(col => <td key={col}> {col} </td>)}
        );
      }

      renderRows(){
       return (
         {this.state.rows.map(row => <tr key={row}> {this.renderCols()} </tr>)}
        );
      }

      render() {
        return <tbody>{this.renderRows()}</tbody>;
      }
    }

    class Table extends React.Component {
      render() {
        return (
          <div>
            <table>
            <Tbody />
             </table>
          </div>
        );
      }
    }

    ReactDOM.render(<Table />, document.getElementById("root"));

【问题讨论】:

    标签: javascript reactjs html-table jsx


    【解决方案1】:

    您的 renderColsrenderRows 方法返回 JSX。而是从那里返回纯 JS 对象,删除那些 {..}

    class Tbody extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          cols: [1, 2],
          rows: [1, 2, 3]
        };
      }
    
      renderCols() {
        
        return (
          this.state.cols.map(col => <td key={col}>{col}</td>)
        );
      };
    
      renderRows(){
       return (
         this.state.rows.map(row => <tr key={row}>{this.renderCols()}</tr>)
        );
      }
      
      render() {
        return <tbody>{this.renderRows()}</tbody>;
      }
    }
    
    class Table extends React.Component {
      render() {
        return (
          <div>
            <table>
            <Tbody />
             </table>
          </div>
        );
      }
    }
    
    ReactDOM.render(<Table />, 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>

    【讨论】:

    • 这可行,但是这个带有更新的 codepen 控制台(codepen.io/chriscruz/pen/aPwbNP?editors=1011)在控制台中给了我一个警告:警告:validateDOMNesting(...):%s 不能作为 .%s%s%s" "空白文本节点" "tr" "确保源代码每一行的标签之间没有多余的空白。" "" "
    • @Chris 删除您拥有的&lt;tr&gt;&lt;/tr&gt; 之间的空格。就像&lt;tr key={row}&gt; {this.renderCols()} &lt;/tr&gt; 应该是&lt;tr key={row}&gt;{this.renderCols()}&lt;/tr&gt;.. 同样适用于&lt;td&gt;。 React 会发出警告。
    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 2021-09-28
    • 2019-01-14
    • 2011-06-15
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多