React.Children 详解

React.Children提供了处理 this.props.children 的 API,this.props.children 支持任何数据(组件、字符串、函数等等)。React.children有5个方法:React.Children.map(),React.Children.forEach()、React.Children.count()、React.Children.only()、React.Children.toArray(),通常与React.cloneElement()结合使用来操作this.props.children。

React.Children.map()

React.Children.map()有些类似Array.prototype.map()。如果children是数组,则此方法返回一个数组,如果是null 或 undefined 则返回null或undefined。第一参数是children,即示例中的Father组件里的 'hello world!' 和() => <p>2333</p>函数。第二个参数是fucntion,function的参数第一个是遍历的每一项,第二个是对应的索引。

function Father({children}) {return(<div>{React.Children.map(children, (child, index) => {...})}</div>)        }<Father>hello world!{() => <p>2333</p>}
</Father>

React.Children.forEach()

跟React.Children.map()一样,区别在于无返回。

React.Children.count()

React.Children.count()用来计数,返回child个数。不要用children.length来计数,如果Father组件里只有'hello world!'会返回12,显然是错误的结果。

function Father({children}) {return(<div>{React.Children.count(children)}</div>    )        }
<Father>hello world!{() => <p>2333</p>}
</Father>

React.Children.only()

验证children里只有唯一的孩子并返回他。否则这个方法抛出一个错误。

function Father({children}) {return(<div>{React.Children.only(children)}</div>    )
}<Father>hello world!
</Father>

React.Children.toArray()

将children转换成Array,对children排序时需要使用

function Father({children}) {let children1 = React.Children.toArray(children);return(<div>{children1.sort().join(' ')}</div>    )
}<Father>{'ccc'}{'aaa'}{'bbb'}
</Father>//渲染结果: aaa bbb ccc

如果不用React.Children.toArray()方法,直接写children.sort()就会报错

Example:

例如有这样的需求,完成一个操作需要3个步骤,每完成一个步骤,对应的指示灯就会点亮。

index.jsx

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {Steps, Step} from './Steps';function App() {return (<div><Steps currentStep={1}>  //完成相应的步骤,改变currentStep的值。如,完成第一步currentStep赋值为1,完成第二部赋值为2<Step /><Step /><Step /></Steps></div>);
}
ReactDOM.render(<App />, document.getElementById('root'));

Steps.jsx

import * as React from 'react';
import './step.less';function Steps({currentStep, children}) {return (<div>{React.Children.map(children, (child, index) => {return React.cloneElement(child, {index: index,currentStep: currentStep});})}</div>);
}function Step({index, currentStep}: any) {return <div className={`indicator${currentStep >= index + 1 ? ' active' : ''}`} />;
}
export {Steps, Step};

steps.less

.indicator {  display: inline-block;
  width: 100px;
  height: 20px;
  margin-right: 10px;
  margin-top: 200px;
  background: #f3f3f3;
  &.active {    background: orange;
  }

React.children简介

React.Children 是 React 的内置对象,具有很多方法。

this.props.children 或者 props.children 表示某个组件的子组件。注意数据类型:如果没有子组件,null;如果只有一个子组件,object;如果有多个子组件,就是 array。所以直接处理 this.props.children 比较麻烦。

使用 React.Children 处理 this.props.children 可以解决数据类型的问题。下面是主要方法

map

类似于数组的 map,可以获取每一个子组件并处理

function handleChildren() {React.Children.map(this.props.children, function(child) {return <li>{child}</li>});
}

这样可以批量处理子组件

let NodeList = React.createClass({render: function() {return (<ul>{this.handleChildren()}</ul>);}
});React.render(<NotesList><span>hello</span><span>Michael</span></NotesList>,
document.body);

<ul><li><span>hello</span></li><li><span>Michael</span></li>
</ul>

forEach

不返回对象,只实现 this.props.children 数据处理;通常使用 map 方法;

count

React.Children.count(this.props.children) 返回子组件的数量(012)


http://www.taodudu.cc/news/show-6998203.html

相关文章:

  • 常被忽略的React Children用法
  • 微信开发工具自定义组件样式覆盖不了原有的样式
  • 微信小程序自定义导航栏兼容适配所有机型
  • 小程序 地区选择器
  • 微信小程序怎么修改自定义组件中的样式
  • 微信小程序 省市区三级地址选择实现
  • 什么是缺陷管理
  • 如何做好项目缺陷管理
  • 缺陷管理的一般流程
  • 软件缺陷是什么以及缺陷的管理
  • 缺陷分类以及管理
  • 缺陷管理 + 配置管理
  • 缺陷管理【重点内容哦】
  • 软件测试 - 缺陷管理
  • 缺陷管理规范
  • 【电力电子技术AC-DC】电容滤波的三相不可控整流电路simulink仿真
  • 变频器MATLAB仿真模型(前端采用二极管整流,含有进线电抗器,预充电模块,母校电容与均压电阻
  • 安科瑞ANCK系列串联电抗器,主要用于提高0.4kV电力系统的功率因数,抑制电网的高次谐波,减轻电容器由谐波引起的过载,防止谐波放大
  • 电压源驱动和电流源驱动 输入阻抗和输出阻抗小结
  • 输入输出阻抗
  • 输入阻抗 输出阻抗
  • 关于电路的输入阻抗和输出阻抗
  • 连接与集成
  • 新勒索病毒 Petya 已席卷全球,多家跨国企业陷入瘫痪
  • 用友ERT T6 技术解析(四)采购入库 上
  • 用友T3、T6常见问题
  • 实验一 词法分析程序设计_重庆新增一生物2级安全实验室,将着眼新冠病毒等药物检测分析...
  • 仿制药一致性评价如火如荼,药企该何去何从
  • 《校正病例对照微生物组研究中的批次效应》
  • 间接比较各种生物制剂治疗传统DMARDs难治性RA

React.Children 详解相关推荐

  1. react 遍历对象_React 源码系列 | React Children 详解

    本文基于 React V16.8.6,本文代码地址 测试代码 源码讲解 React 中一个元素可能有 0 个.1 个或者多个直接子元素,React 导出的 Children 中包含 5 个处理子元素的 ...

  2. React 源码系列 | React Context 详解

    目前来看 Context 是一个非常强大但是很多时候不会直接使用的 api.大多数项目不会直接使用 createContext 然后向下面传递数据,而是采用第三方库(react-redux). 想想项 ...

  3. childnodes与children详解

    childnodes与children详解 例:<div id="parentDiv"> <span>我爱</span> </br> ...

  4. RN和React路由详解及对比

    前言 在平时H5或者RN开发时,我们业务场景中大部分都不是单页面的需求,那这时我们就能使用路由在进行多页面的切换.下面会对比一下react路由和RN路由的本质区别和使用方法. 路由(routing)是 ...

  5. rn php,RN和React路由详解及对比

    前言 在平时H5或者RN开发时,我们业务场景中大部分都不是单页面的需求,那这时我们就能使用路由在进行多页面的切换.下面会对比一下react路由和RN路由的本质区别和使用方法. 路由(routing)是 ...

  6. 【React】 详解下一代开源混合应用框架Reapp

    详解下一代开源混合应用框架Reapp reapp官网 转载于:https://www.cnblogs.com/dongdong230/p/4314978.html

  7. React 路由详解(超详细详解)

    React React 路由 对SPA的理解 1.单页Web应用(single page web application,SPA). 2.整个应用只有一个完整的页面. 3.点击页面中的链接不会刷新页面 ...

  8. React Hooks 详解

    文章目录 为什么会有Hooks? 什么是Hooks? 一.userState():状态钩子 二.useEffect():副作用钩子 三.useContext():共享状态钩子 四.useReducer ...

  9. React Fiber详解

    问题是什么? 我们先看一个例子: https://claudiopro.github.io/react-fiber-vs-stack-demo/stack.html 在上面这张图片中,页面出现一卡一卡 ...

最新文章

  1. LeetCode--024--两两交换链表中的节点(java)
  2. C#泛型-泛型集合DictionaryK,V
  3. socket缓冲区以及阻塞模式详解
  4. 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation
  5. 近来接连换了U盘、剃须刀,京东服务确实好
  6. RAID 的各种方案
  7. 电线电缆行业MES解决方案
  8. 使用 bioMart 包获取数据库信息
  9. QtSQL的使用心得
  10. 计算机连接苹果手机不能找到照片目录,苹果手机上照片在电脑找不到了怎么办...
  11. C# winform 魔兽MH全图制作教程(3):魔兽1.20E.1.24B.1.24E全图内存地址 转自breeze...
  12. 计算机毕业设计太难做不出来怎么办?
  13. C# 克隆(Clone)中的深拷贝和浅拷贝
  14. 码元速率的盲估计-包络谱法
  15. Satwe楼板能用弹性模计算吗_PKPM学习笔记,或许半辈子都能用上
  16. VLDB‘22 HiEngine极致RTO论文解读
  17. 虎年啦,小老虎带你4.5分钟彻底掌握Linux中的创建-目录-文件(mkdir-touch)
  18. 西瓜皮——被丢掉的真金白银,夏天的健康守护神
  19. 阿里“来往”的产品战略方向
  20. 【多线程】优雅使用线程池结合CompletableFuture实现异步编排

热门文章

  1. JavaScript中this面试题, 四道题彻底清楚this指向问题
  2. Linux下如何查看版本信息, 包括位数、版本信息以及CPU内核信息、CPU具体型号
  3. OpenFlow:简述对OpenFlow协议的认识
  4. Windows 2000/XP 系统对U盘的处理过程入手,逆向彻底消除U盘使用痕迹
  5. 通过2DAO 投资二级市场的机会与潜力
  6. python使用numpy碰到的维度问题
  7. java中滚动条样式,CSS3自定义滚动条样式 -webkit-scrollbar
  8. Java 格式化 XML
  9. 谷歌的愚人节玩笑开大了
  10. 微软CRM 开发学习笔记 使用c#编写插件(plugin)的方式实现页面执行操作