You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中传递state作为props给子组件后页面无数据显示如何解决?

问题:传递数组数据给子组件后页面无内容显示

我看了你的代码,问题很明确——你把整个数组传给了ListRow组件,但在子组件里却把它当成单个对象来访问属性,这就导致所有td里的内容都是undefined,自然页面上看不到东西。

具体修改方案:

1. 父组件:遍历数组,为每个数据项渲染一个ListRow

你需要在父组件里对experimentData数组做遍历,把每个单独的对象传给ListRow,而不是直接传整个数组。另外要记得把tr放在<table>和<tbody>标签里(HTML规范要求tr必须嵌套在这些元素中):

<div className="experiments-list-container">
  <table>
    <tbody>
      {this.state.experimentData.map(experiment => (
        <ListRow 
          key={experiment.id} 
          rowItem={experiment} 
        />
      ))}
    </tbody>
  </table>
</div>

这里的key是React要求的,用来标识每个列表项的唯一性,用数据的id是最合适的选择。

2. 子组件ListRow:接收单个数据对象并渲染

修改子组件,从this.props.rowItem(单个对象)里读取属性,而不是之前的rowItems(数组)。另外你之前的createdAt也是从错误的地方取的,要从当前的rowItem里获取:

render() {
  console.log('rowItem', this.props.rowItem)
  // 从单个数据对象里取createdAt
  const dateDisplay = moment(this.props.rowItem.createdAt).format('MMM YYYY');
  return (
    <tr className="experiment-list__row" onClick={this.handleRowClick}>
      <td className="experiment-list--col__check">
        <Checkbox />
      </td>
      <td>{this.props.rowItem.name}</td>
      <td>{this.props.rowItem.owner}</td>
      <td>{dateDisplay}</td>
    </tr>
  );
}

为什么之前的代码不生效?

你控制台打印的rowItems是一个包含5个对象的数组,但数组本身并没有name、owner这些属性——这些属性是数组里每个元素的。所以你之前写this.props.rowItems.name的时候,拿到的是undefined,页面自然显示为空。

这样修改后,就能正确渲染每一行数据了。

内容的提问来源于stack exchange,提问作者Dawn17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:37:41