具有两组 children 的 React 组件

React component with two sets of children

我正在创建一个组件,它需要包含两组 children 并放置在组件的两个不同部分。

let CreditCardForm = ({icons, fields}) => (
  <div>
    <div className='some'>
      <div className='special'>
        <div className='nesting'>
          {icons}
        </div>
      </div>
    </div>
    {fields}
  </div>
)

let CreditCardFormUsage = () => {
  let icons = () => (
    <Icons>
      <IconBogus/>
      <IconVisa/>
      <IconPaypal/>
      <IconMore/>
    </Icons>
  )

  let fields = () => (
    <CreditCardFields>
      <FieldCardNumber/>
      <FieldName/>
      <FieldExpirey/>
      <FieldCCV/>
    </CreditCardFields>
  )
  return (
    <CreditCardForm icons={icons} fields={fields}/>
  )
}

上面的代码应该可以工作,我的问题是是否可以根据元素本身的 children 获取那些 属性 值,并获得更自然的东西?

<CreditCardForm>
  <Icons>
    <IconBogus/>
    <IconVisa/>
    <IconPaypal/>
    <IconMore/>
  </Icons>
  <CreditCardFields>
    <FieldCardNumber/>
    <FieldName/>
    <FieldExpirey/>
    <FieldCCV/>
  </CreditCardFields>
</CreditCardForm>

是的,你可以用儿童道具来做。阅读更多@docs:

https://facebook.github.io/react/tips/children-props-type.html

当然还有 React.Children

https://facebook.github.io/react/docs/top-level-api.html#react.children

是的,this.props.children 将 return 一个数组,因此如果您总是想加载特定的子项,那么只需在包装器中通过索引引用这些子项。然后你可以把 iconsfields 变成包装器组件。这是一个工作 jsfiddle。看看Apprender方法如何正是你想要的。

CreditCardForm 渲染:

<div>
    <div className='some'>
      <div className='special'>
        <div className='nesting'>
          {this.props.children[0]}
        </div>
      </div>
    </div>
    {this.props.children[1]}
 </div>

字段和图标呈现:

<div>{this.props.children}</div>

应用渲染:

<CreditCardForm>
    <Icons>
        <IconBogus />
    </Icons>
    <Fields>
      <FieldCardNumber />
      <FieldName />
    </Fields>
</CreditCardForm>