当前位置: 首页 > news >正文

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

相关文章:

  • Java中 return 和finally
  • IT架构师绝对不能错过的34张史上最全技术知识图谱
  • 磁盘管理命令
  • 华信Sybase ASE数据库恢复软件 3.0
  • 复杂网络的统计描述
  • 复兴号动车组甲醛超标?中国铁路北京局:报道不实
  • YUM+NTP服务器的搭建 (RHEL6.1搭建) 纯文本
  • 组复制官方翻译四、Monitoring Group Replication
  • 在这里,你终究会真正地失败
  • JavaScript Array 的方法 (笔记)
  • python的抽象编程思想
  • YY的GCD
  • 哈希 --- 线性探测法
  • 百度的疯狂 UC的隐忍
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ES6指北【2】—— 箭头函数
  • [译] 怎样写一个基础的编译器
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CentOS7简单部署NFS
  • github从入门到放弃(1)
  • HTML5新特性总结
  • java 多线程基础, 我觉得还是有必要看看的
  • Java程序员幽默爆笑锦集
  • Linux gpio口使用方法
  • Markdown 语法简单说明
  • MYSQL 的 IF 函数
  • Puppeteer:浏览器控制器
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue2.x学习三:事件处理生命周期钩子
  • 解决iview多表头动态更改列元素发生的错误
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习HTTP相关知识笔记
  • 在electron中实现跨域请求,无需更改服务器端设置
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 大数据全解:定义、价值及挑战
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • !!Dom4j 学习笔记
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2)Java 简介
  • (33)STM32——485实验笔记
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (分布式缓存)Redis哨兵
  • (十八)三元表达式和列表解析
  • (十一)c52学习之旅-动态数码管
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m