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

  • 相关阅读:
    Fitness
    【代码优化】Unity查漏补缺
    Fitness
    MonoBehaviour生命周期与对象数据池应用
    Fitness
    点、向量、方向在局部与世界坐标系转换的对比
    在企业运营中的感触
    技术杂想2015年夏天
    Heimich manoeuvre 海姆利克氏操作
    徒手CPR心脏复苏
  • 原文地址:https://www.cnblogs.com/darrenji/p/5650410.html
Copyright © 2011-2022 走看看