this.props對象的屬性與組件的屬性一一對應(yīng),但是有個(gè)例外:this.props.children哥攘,他表示組件所有的子節(jié)點(diǎn)剖煌。
var NotesList = React.createClass({
render: function() {
return (
<ol>
{
React.Children.map(this.props.children, function (child) {
return <li>{child}</li>;
})
}
</ol>
);
}
});
ReactDOM.render(
<NotesList>
<span>hello</span>
<span>world</span>
</NotesList>,
document.body
);
上面代碼的 NoteList 組件有兩個(gè) span 子節(jié)點(diǎn),它們都可以通過 this.props.children 讀取逝淹。這里需要注意末捣, this.props.children 的值有三種可能:
- 如果當(dāng)前組件沒有子節(jié)點(diǎn),它就是
undefined
创橄; - 如果有一個(gè)子節(jié)點(diǎn)箩做,數(shù)據(jù)類型是
object
; - 如果有多個(gè)子節(jié)點(diǎn)妥畏,數(shù)據(jù)類型就是
array
React 提供一個(gè)工具方法 React.Children
來處理 this.props.children
邦邦。我們可以用React.Children.map
來遍歷子節(jié)點(diǎn),而不用擔(dān)心 this.props.children
的數(shù)據(jù)類型是 undefined
還是 object
醉蚁。
1.React.Children.map
object React.Children.map(object children, function fn [, object context])
在每一個(gè)直接子級(包含在children
參數(shù)中的)上調(diào)用 fn 函數(shù)燃辖,此函數(shù)中的 this 指向 上下文。如果children
是一個(gè)內(nèi)嵌的對象或者數(shù)組网棍,它將被遍歷:
不會傳入容器對象到 fn 中黔龟。如果 children 參數(shù)是 null 或者 undefined,那么返回 null 或者 undefined 而不是一個(gè)空對象滥玷。
2.React.Children.forEach
React.Children.forEach(object children, function fn [, object context])
類似于React.Children.map()
氏身,但是不返回對象。
3.React.Children.count
number React.Children.count(object children)
返回 children 當(dāng)中的組件總數(shù)惑畴,和傳遞給 map
或者forEach
的回調(diào)函數(shù)的調(diào)用次數(shù)一致蛋欣。
4.React.Children.only
object React.Children.only(object children)
返回 children
中僅有的子級。否則拋出異常如贷。