Я в ситуации, когда я создаю компонент, который должен отображать некоторые дочерние компоненты. Более конкретно, у меня есть компонент Map, и на нем я хочу отобразить компонент Legend.Реагировать: использовать this.props.children или передать компоненты как названные реквизиты
const Map = props => (
<div id="map">
{ this.props.children }
</div>
);
// Usage:
const MapWithLegend =() => (
<div id="map-view">
<Map><Legend /></Map>
</div>
);
// Usage:
const MapWithoutLegend =() => (
<div id="map-view">
<Map />
</div>
);
Однако, это также может быть выражено по имени реквизита:
const Map = ({ legend } => (
<div id="map">{ legend }</div>
);
// Usage:
const MapWithLegend =() => (
<div id="map-view">
<Map legend={Legend} />
</div>
);
// Usage:
const MapWithoutLegend =() => (
<div id="map-view">
<Map />
</div>
);
Я не уверен, какой путь является лучшим с точки зрения масштабирования и повторного использования. В конечном счете, у нас будет больше, чем просто легенд, чтобы переложить карту, например: шкалы, средства управления увеличением/навигации и т. Д.
Имеет ли смысл использовать React.Children для этого или я должен использовать именованные реквизиты ?
Мою интуицию заключается в том, что использование this.props.children
освобождает карту от заботы о том, нужно ли отображать легенду или любые другие дочерние элементы управления, но также создает бэкдор в компоненте Карта, то есть: передача произвольных компонентов в виде детей компонента карты.
Это беспокойство? Общепринято ли проверять this.props.children
в родительском компоненте перед их рендерингом? Если да, то как?
Также, как насчет стилизации? С названным реквизитом я могу позиционировать/стилизовать «детей», так как они названы, и я знаю, что они собой представляют. С React.Children это массив компонентов, которые необходимо будет проверить, чтобы они могли быть расположены, и в этом случае, что я получу от использования this.props.children
?
Я видел сторонние компоненты, использующие обе парадигмы, но мне любопытно, каковы сценарии, в которых один выбирает один за другим.
Вы можете проверить детей https://facebook.github.io/react/tips/children-props-type.html. В режиме dev вы также можете использовать propTypes, чтобы помочь вам принудительно проверить тип детей для React.PropTypes.element или React.PropTypes.arrayOf (React.PropTypes.element) – huocp