【问题标题】:How to wrap a table's tr in React as a child小时候如何在 React 中包装表格的 tr
【发布时间】:2015-11-05 19:53:15
【问题描述】:

如何将 {this.props.children} 包装在父亲组件中?

显然,div 是不允许的。但必须包起来。

现在我提供有关该问题的更多详细信息。基本上,我想要一个父组件,它能够获取数据并更改其子组件以在不同情况下呈现不同的视图。这是显示一个表格,子是表格的行。我想使用相同的数据来显示其他内容。 希望这可以清楚地表达问题。

Child = React.createClass({
  render(){
    return (
      <tr>
        <td> {this.props.name} </td>
        <td> {this.props.age} </td>
        <td> {this.props.address} </td>
      </tr>
    )
  }
});    

Father = React.createClass({
  fetchData(){
    ...
  },
  render(){
    //how to wrap here? <div> is not allowed
    {this.props.children}
  }
});

GrandFather = React.createClass({
  renderSomething(){
    return this.props.persons.map((p) => {
      return ( <Father> 
                 <Child>
               </Father>
      )
    });
  },
  render(){
    <div>
      <table>
        <thead>
          <tr>
            <th> Name </th>
            <th> Age  </th>
            <th> Address </th>
          </tr>
        </thead>
        <tbody>
          {this.renderSomething()}
        </tbody>
      </table>
    </div>
  }
});

最终更新


看起来没有办法将 a 包装在 React 组件中。我想可能有一些我不知道的 HTML 魔法。 最终我只是改变了代码结构。现在可以了。

【问题讨论】:

    标签: reactjs components


    【解决方案1】:

    我认为你的问题太理论化了,你应该提供一个更具体的例子。使用您当前的代码:

    • Father 类实际上什么都不做,因此您可以直接删除它,您的代码就可以了。
    • renderSomething() 恕我直言从未执行,假设 GrandFather.render() 作为入口点。

    关于你的理论问题:

    • 不,render() 必须返回一个元素,不多也不少。所以你不能有一个只返回元素数组的render()

    查看您更新的问题...

    您可以将 &lt;tbody&gt;GrandFather 移动到 Father 并将其用于包装。一个&lt;table&gt; 可以包含多个&lt;tbody&gt; 部分。

    【讨论】:

    • 我添加了更多代码来澄清问题。它实际上归结为如何包装表格的行 元素。
    • 但是这样一来,单元格看起来就不同了。
    • 这似乎是与您的表格样式有关的另一个问题。
    【解决方案2】:

    就目前而言,您只是返回一个空 div,因此您不会遇到任何问题。你会想要移动一些其他的东西,但是......

    您正在寻找的答案是否像让父亲 div 成为表格标签一样简单?

    【讨论】:

    • 对不起,我没有说清楚。现在我编辑了问题并添加了更多代码。我希望将父亲组件作为数据源组件,以便它可以更改其子组件以显示不同的视图。
    • 如果可能的话,我会尝试取消父亲组件,因为它可能会增加不必要的复杂性。您何时以及如何尝试调用 Fetchdata()?你可以直接在子组件中调用它,然后在 renderSomething 中只返回子组件(这将是一个有效的 jsx 返回对象)?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签