Props.children 和元件組成

元件的元件可在特殊支柱 props.children 上獲得。這個 prop 對於合成元件非常有用,並且可以使 JSX 標記更直觀或反映 DOM 的預期最終結構:

var SomeComponent = function () {
    return (
        <article className="textBox">
            <header>{this.props.heading}</header>
            <div className="paragraphs">
                {this.props.children}
            </div>
        </article>
    );
}

這允許我們在以後使用元件時包含任意數量的子元素:

var ParentComponent = function () {
    return (
        <SomeComponent heading="Amazing Article Box" >
            <p className="first"> Lots of content </p>
            <p> Or not </p>
        </SomeComponent>
    );
}

Props.children 也可以由元件操作。因為 props.children 可能是也可能不是陣列 ,React 為它們提供了實用函式 React.Children 。在前面的例子中考慮一下我們是否想要將每個段落包裝在自己的 <section> 元素中:

var SomeComponent = function () {
    return (
        <article className="textBox">
            <header>{this.props.heading}</header>
            <div className="paragraphs">
                {React.Children.map(this.props.children, function (child) {
                    return (
                        <section className={child.props.className}>
                            React.cloneElement(child)
                        </section>
                    );
                })}
            </div>
        </article>
    );
}

注意使用 React.cloneElement 從子 <p> 標籤中刪除道具 - 因為道具是不可變的,這些值不能直接更改。相反,必須使用沒有這些道具的克隆。

此外,在迴圈中新增元素時,請注意 React 在重新渲染過程中如何協調子項 ,並強烈考慮在迴圈中新增的子元素中包含全域性唯一的 key prop。