javascript - 如何将 props 传递给从组件数组映射的组件?

标签 javascript reactjs

我是 React 新手,有时对术语感到困惑。我的问题是,我正在创建一个 ScrollableList 组件,这些组件作为数组 Prop 传递给 ScrollableList。然后,ScrollableList 将每个组件映射到 div 内,这不允许我将 props 传递给组件,例如“handleChange”。还有另一种我不知道的方法可以做到这一点吗?

ScrollableList渲染:

render() {
  const startPosition = this.state.scrollPosition -
    this.props.maxItemsToRender > 0
      ? this.state.scrollPosition - this.props.maxItemsToRender
      : 0

  const endPosition = this.state.scrollPosition +
    this.props.maxItemsToRender >=
    this.props.listItems.length
      ? this.props.listItems.length
      : this.state.scrollPosition + this.props.maxItemsToRender

  return (
    <div className="react-scrollable-list" ref="list" style={this.props.style}>
      <div
        key="list-spacer-top"
        style={{
          height: startPosition * this.props.heightOfItem
        }}
      />
      //Where My Problem Begins
      {this.props.listItems.slice(startPosition, endPosition).map(item => (
        <div handleChange={this.handleChange}
          className="react-scrollable-list-item"
          key={'list-item-' + item.id}>
          {item.content} 
        </div>
      ))}
      <div
        key="list-spacer-bottom"
        style={{
          height: this.props.listItems.length * this.props.heightOfItem -
            endPosition * this.props.heightOfItem
        }}
      />
    </div>
  )
}

{item.content} 包含我希望将 prop handleChange={this.handleChange} 传递给的组件。有办法做到这一点还是我的设计有问题?

最佳答案

您可以将项目提取到单独的函数

renderItem(item) {
  const Content = item.content;

  return (
    <div 
      handleChange={this.handleChange}
      className="react-scrollable-list-item"
      key={item.id}
    >
      <Content foo="bar" someProp={9} />
    </div>
  );
}

render() {
  const startPosition = this.state.scrollPosition -
    this.props.maxItemsToRender > 0
      ? this.state.scrollPosition - this.props.maxItemsToRender
      : 0

  const endPosition = this.state.scrollPosition +
    this.props.maxItemsToRender >=
    this.props.listItems.length
      ? this.props.listItems.length
      : this.state.scrollPosition + this.props.maxItemsToRender

  return (
    <div className="react-scrollable-list" ref="list" style={this.props.style}>
      <div
        key="list-spacer-top"
        style={{
          height: startPosition * this.props.heightOfItem
        }}
      />
      //Where My Problem Begins
      {this.props.listItems.slice(startPosition, endPosition).map(item => this.renderItem(item))}
      <div
        key="list-spacer-bottom"
        style={{
          height: this.props.listItems.length * this.props.heightOfItem -
            endPosition * this.props.heightOfItem
        }}
      />
    </div>
  )
}

关于javascript - 如何将 props 传递给从组件数组映射的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46886795/

相关文章:

javascript - 如何在另一个类中创建导入类的实例

reactjs - Next JS 导出到静态 HTML 总是在刷新时重定向到主页 "/"

reactjs - React/Redux - 调度不更新 View

javascript - React Router 获取 Prompt 或 history.block 的结果

javascript - 尝试更新 vimeo 正则表达式以从包含 "channels/staffpicks"的 URL 获取 ID

Javascript 从数组中过滤值

javascript - 循环中的迭代如何添加到事件队列中?

javascript - 正则表达式 : Any character that is not a letter or number

javascript - 使用 html2canvas 以固定宽度捕获页面,无论屏幕大小如何

javascript - &lt;input&gt; 内的 ref={register} 给了我一个 path.split 错误