zoukankan      html  css  js  c++  java
  • React中props.children和React.Children的区别

    在React中,当涉及组件嵌套,在父组件中使用props.children把所有子组件显示出来。如下:

    function ParentComponent(props){
    	return (
    		<div>
    			{props.children}
    		</div>
    	)
    }
    

    如果想把父组件中的属性传给所有的子组件,该怎么做呢?

    --使用React.Children帮助方法就可以做到。

    比如,把几个Radio组合起来,合成一个RadioGroup,这就要求所有的Radio具有同样的name属性值。可以这样设计:把Radio看做子组件,RadioGroup看做父组件,name的属性值在RadioGroup这个父组件中设置。

    首先是子组件:

    //子组件
    function RadioOption(props) {
      return (
        <label>
          <input type="radio" value={props.value} name={props.name} />
          {props.label}
        </label>
      )
    }
    

    然后是父组件,不仅需要把它所有的子组件显示出来,还需要为每个子组件赋上name属性和值:

    //父组件用,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让我们对父组件的所有子组件又更灵活的控制。

    项目地址:https://github.com/darrenji/ReactNestedComponentExample

  • 相关阅读:
    20180925-5代码规范
    20180925-4 单元测试,结对
    20180925-6 四则运算试题生成
    20180925-3 效能分析
    20170925-2 功能测试
    20180925-7 规格说明书——吉林市两日游
    20180918-1 词频统计
    第二周例行报告
    iOS开发-CocoaPods使用详细说明
    svn的使用详解
  • 原文地址:https://www.cnblogs.com/darrenji/p/5650410.html
Copyright © 2011-2022 走看看