将道具传递给 {children()} 以用于子页面的组件

Pass props to {children()} for use in component of child page

如何将道具传递给子页面的组件?

我要传递的道具是onToggleBooking: PropTypes.func,它在我的layout.js(根文件)中定义为

lass Template extends React.Component {
constructor(props) {
    super(props)
    this.state = {
        isBookingVisible: false,
    }
    this.handleToggleBooking = this.handleToggleBooking.bind(this)
}

handleToggleBooking() {
    this.setState({
        isBookingVisible: !this.state.isBookingVisible
    })
}

render() {
    const { children } = this.props
    return (
        <main className={`${this.state.isBookingVisible ? 'is-booking-visible' : ''}`}>
            {children()}
        </main>
        )
    }
}

Template.propTypes = {
    children: PropTypes.func
}
export default Template

我想将 onToggleBooking={this.handleToggleBooking} 属性传递给 {children()},这样我就可以在其中一个子页面的组件中传递和使用。

为此我尝试了

{
  children.map(child => React.cloneElement(child, {
    onToggleBooking
  }))
}

但我收到错误 children.map 未定义。

首先,理想的情况是通过像这样的道具渲染 children:

  render() {
    return <div>{ this.props.children }</div>
  }  

渲染 children 作为 prop 函数是可行的,但你应该看一下以确保你的 class children 被正确配置,并且生成的渲染模板有效:

class CoolClass extends Component {
  render() {                  
      return this.props.children()
  }
}  

然后您在渲染时调用的模板应如下所示:

<CoolClass>
  {() => <h1>Hello World!</h1>}
</CoolClass>  

您即将使用 onToggleBooking={this.handleToggleBooking} 传递切换处理程序,但它需要作为组件本身的道具提供,或者 child 您的传递。您可以编辑构造函数以将其包含在您的 props.children 中,但这可能很难调试正确调用 children() prop 作为函数。