Когда я изучал React, было несколько вещей, которые я не мог четко понять, и одна из них была детская опора. Так было до тех пор, пока я не столкнулся с проблемой, подобной следующей.

Во время работы над функцией «Подробнее» несколько компонентов, которые различаются только заголовком. Я решил создать компонент-оболочку ‹MoreDetails /›. Поскольку я должен управлять состоянием того, отображается он или нет, он должен быть компонентом класса. Таким образом, это позволяет мне передавать конкретный заголовок через опору для детей и избегать дублирования использования оболочки. Ниже вы увидите метод рендеринга компонента-оболочки:

// MoreDetails.js
...
render() {
        return (
            <div>
                <Accordion>
                    // in this place should be a title for each invoking the MoreDetails component
                    {this.props.children}
                    <button onClick={this.showContent}>
                        {this.state.showedContent ? 'Ausblenden' : 'Anzeigen'}
                    </button>
                </Accordion>
                <MoreDetailsComponent className={this.state.showedContent ? show : hide}/>
            </div>
        );
    }
}

Чтобы показать использование дочерних элементов, просто используйте полный тег ‹MoreDetails›… ‹/MoreDetails› и поместите дочерние элементы между открывающим и закрывающим тегами. Например:

// VideoDetails.js
...
return(
  <div>
      // all <p> DOM-element and all texts inside are {this.props.children} for <MoreDetails /> component
      <MoreDetails><p>Notizen</p></MoreDetails>
      <MoreDetails><p>Feedback an Dozenten</p></MoreDetails>
      <MoreDetails><p>Kommentare</p></MoreDetails>
   ...
  </div>

Поскольку цель поддержки детей для этой задачи - просто отобразить содержимое элемента ‹p›, поэтому я могу настроить заголовок так, как мне нужно, и продолжать повторно использовать ‹MoreDetails /› компонент.

Вы можете узнать больше о React.Children API и найти более подробную информацию здесь.

Спасибо за внимание! 👏

Я надеюсь, что вы найдете этот пост полезным для применения props.children в вашем проекте React.

Ура,
илонакоды