• 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

  • 相关阅读:
    又是一年叶落时(二)
    动态规划 之 区间DP练习
    [hdu2255] 奔小康赚大钱
    [洛谷P1967] 货车运输
    [UVA1494] Qin Shi Huang's National Road System
    斜率优化总结
    latex一些有用的写法
    [YTU]_2384 ( 矩形类中运算符重载【C++】)
    [YTU]_2442( C++习题 矩阵求和--重载运算符)
    [YTU]_2640( 编程题:运算符重载---矩阵求和)
  • 原文地址:https://www.cnblogs.com/darrenji/p/5650410.html
Copyright © 2020-2023  润新知