【问题标题】:How do I iterate nested arrays in a React component?如何在 React 组件中迭代嵌套数组?
【发布时间】:2016-05-16 22:55:01
【问题描述】:

我有一个多维数组:一个数组 results 包含 18 个数组 row,每个数组包含 6 个数字。

我想将其呈现为表格。逻辑是

results.each as (row)
     <tr>
         row.each as (number)
               <td>number</td>
     </tr>

但我不知道你会如何在 JSX 中编写它。

const Resultset = props => (
    {props.rows.map(rows => {
        <tr>
            {rows.map(number => <td>{number}</td>)}
        </tr>
    })}
);

但这是不对的。这是什么程序,如何嵌套地图调用和插值?

【问题讨论】:

    标签: reactjs react-jsx


    【解决方案1】:

    一种方法

    var arr = [ [ 2, 3, 4, 5, 6, 7 ],
      [ 8, 9, 10, 11, 12, 13 ],
      [ 14, 15, 16, 17, 18, 19 ],
      [ 20, 21, 22, 23, 24, 25 ],
      [ 26, 27, 28, 29, 30, 31 ],
      [ 32, 33, 34, 35, 36, 37 ],
      [ 38, 39, 40, 41, 42, 43 ],
      [ 44, 45, 46, 47, 48, 49 ],
      [ 50, 51, 52, 53, 54, 55 ],
      [ 56, 57, 58, 59, 60, 61 ],
      [ 62, 63, 64, 65, 66, 67 ],
      [ 68, 69, 70, 71, 72, 73 ],
      [ 74, 75, 76, 77, 78, 79 ],
      [ 80, 81, 82, 83, 84, 85 ],
      [ 86, 87, 88, 89, 90, 91 ],
      [ 92, 93, 94, 95, 96, 97 ],
      [ 98, 99, 100, 101, 102, 103 ],
      [ 104, 105, 106, 107, 108, 109 ] ];
    
    var Hello = React.createClass({
      tablerows: function() {
        return this.props.arr.map(rows => {
            var row = rows.map(cell => <td>{cell}</td>); 
            return <tr>{row}</tr>;
        });
      },
      render: function() {
        return <table>{this.tablerows()}</table>;
      }
    });
    
    ReactDOM.render(
      <Hello arr={arr} />,
      document.getElementById('container')
    );
    

    实际操作中:https://jsfiddle.net/69z2wepo/30476/

    【讨论】:

      【解决方案2】:

      我建议将组件分离为ResultsetNumberComponent,并尽量与箭头函数保持一致。

      // Explicit return
      
      const NumberComponent = props => {
          return (
              <td>{ props.number }</td>
          )
      }
      
      const Resultset = props => {
          return (
              <tr>
                  {
                      props.rows.map( number => <NumberComponent number={number} />)
                  }
              </tr>
          )
      }
      
      // Implicit return
      
      const NumberComponent = props => (<td>{ props.number }</td>);
      
      const Resultset = props => (
          <tr>
              {
                  props.rows.map( number => <NumberComponent number={number} />)
              }
          </tr>
      );
      

      【讨论】:

        【解决方案3】:

        这对我映射数组数组很有效,我已将包含数组的数组命名为 root,我将函数设置为:

        //root render function
        
        renderNested = (row, i) => {
            return (
                root.map(function (row, i) {
                    return (
                    <div key={i}>
                        {this.renderNested(row, i)}
                    </div>
                    )
                }, this)
            )
        }
        
        //nested render function
        
        renderNested = (row, i) => {
            return (
                row.map(function (innerrow, ii) {
                    return(
                        <span key={ii}>
                            Nested content here
                        </span>
                    )
                }, this)
            )
        }
        

        【讨论】:

          【解决方案4】:

          您可以迭代数组的第一部分,在第二次迭代中您可以调用另一个组件并将第二个数组作为道具传递

          const Resultset = props => (
          {props.rows.map(rows => {
              <tr>
                  <AnotherComponent rows={rows} />
              </tr>
          })}
          );
          

          在另一个组件中,您重复相同的映射过程。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-17
            • 2021-10-28
            • 2019-09-16
            • 1970-01-01
            • 2013-05-05
            • 1970-01-01
            • 1970-01-01
            • 2016-04-10
            相关资源
            最近更新 更多