在React中,当涉及组件嵌套,在父组件中使用
props.children
把全部子组件显示出来。以下:git
function ParentComponent(props){ return ( <div> {props.children} </div> ) }
若是想把父组件中的属性传给全部的子组件,该怎么作呢?github
--使用React.Children
帮助方法就能够作到。设计
好比,把几个Radio组合起来,合成一个RadioGroup,这就要求全部的Radio具备一样的name属性值。能够这样设计:把Radio看作子组件,RadioGroup看作父组件,name的属性值在RadioGroup这个父组件中设置。code
首先是子组件:get
//子组件 function RadioOption(props) { return ( <label> <input type="radio" value={props.value} name={props.name} /> {props.label} </label> ) }
而后是父组件,不只须要把它全部的子组件显示出来,还须要为每一个子组件赋上name属性和值:input
//父组件用,props是指父组件的props function renderChildren(props) { //遍历全部子组件 return React.Children.map(props.children, child => { if (child.type === RadioOption) return React.cloneElement(child, { //把父组件的props.name赋值给每一个子组件 name: props.name }) else return child }) } //父组件 function RadioGroup(props) { return ( <div> {renderChildren(props)} </div> ) } function App() { return ( <RadioGroup name="hello"> <RadioOption label="选项一" value="1" /> <RadioOption label="选项二" value="2" /> <RadioOption label="选项三" value="3" /> </RadioGroup> ) } export default App;
以上,React.Children.map
让咱们对父组件的全部子组件又更灵活的控制。it
项目地址:https://github.com/darrenji/ReactNestedComponentExampleio