简体   繁体   English

如何将两个回调传递给React.cloneElement

[英]How to pass two callback to React.cloneElement

I am current passing two callback to a child component using 我目前通过使用两个回调传递给子组件

React.cloneElement

when inspecting my project I notice that activeRow is always present but deactivateRow is undefined . 在检查项目时,我注意到activeRow始终存在,但deactivateRowundefined

Could you give me an idea of what can cause this problem? 您能告诉我什么会导致此问题吗?

export class Row extends React.Component<Props, State> {
  state: State = {
    isActive: false,
  }
  activeRow = () => {
    this.setState({ isActive: true })
  }

  deactivateRow = () => {
    this.setState({ isActive: false })
  }

  render(): JSX.Element {
    const { classes, children } = this.props
    const { isActive } = this.state
    return (
      <TableRow className={isActive ? classes.active: classes.noActive}>
        {React.cloneElement(this.props.children, {
          activeRow: this.activeRow,
          deactivateRow: this.deactivateRow,
        })}
      </TableRow>
    )
  }
}

React.cloneElement , just clones a single React element , for cloning more that one children element, you need to map over all the children and clone them React.cloneElement ,仅克隆一个single React element ,要克隆多个子元素,您需要映射所有子元素并将其克隆

export class Row extends React.Component<Props, State> {
  state: State = {
    isActive: false,
  }
  activeRow = () => {
    this.setState({ isActive: true })
  }

  deactivateRow = () => {
    this.setState({ isActive: false })
  }

  render(): JSX.Element {
    const { classes, children } = this.props
    const { isActive } = this.state
    return (
      <TableRow className={isActive ? classes.active: classes.noActive}>
        {React.Children.map(this.props.children, (child) => {
           return React.cloneElement(child, {
                  activeRow: this.activeRow,
                  deactivateRow: this.deactivateRow
              }
          }
       )}
      </TableRow>
    )
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM