React.Children 详解
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 详解相关推荐
- react 遍历对象_React 源码系列 | React Children 详解
本文基于 React V16.8.6,本文代码地址 测试代码 源码讲解 React 中一个元素可能有 0 个.1 个或者多个直接子元素,React 导出的 Children 中包含 5 个处理子元素的 ...
- React 源码系列 | React Context 详解
目前来看 Context 是一个非常强大但是很多时候不会直接使用的 api.大多数项目不会直接使用 createContext 然后向下面传递数据,而是采用第三方库(react-redux). 想想项 ...
- childnodes与children详解
childnodes与children详解 例:<div id="parentDiv"> <span>我爱</span> </br> ...
- RN和React路由详解及对比
前言 在平时H5或者RN开发时,我们业务场景中大部分都不是单页面的需求,那这时我们就能使用路由在进行多页面的切换.下面会对比一下react路由和RN路由的本质区别和使用方法. 路由(routing)是 ...
- rn php,RN和React路由详解及对比
前言 在平时H5或者RN开发时,我们业务场景中大部分都不是单页面的需求,那这时我们就能使用路由在进行多页面的切换.下面会对比一下react路由和RN路由的本质区别和使用方法. 路由(routing)是 ...
- 【React】 详解下一代开源混合应用框架Reapp
详解下一代开源混合应用框架Reapp reapp官网 转载于:https://www.cnblogs.com/dongdong230/p/4314978.html
- React 路由详解(超详细详解)
React React 路由 对SPA的理解 1.单页Web应用(single page web application,SPA). 2.整个应用只有一个完整的页面. 3.点击页面中的链接不会刷新页面 ...
- React Hooks 详解
文章目录 为什么会有Hooks? 什么是Hooks? 一.userState():状态钩子 二.useEffect():副作用钩子 三.useContext():共享状态钩子 四.useReducer ...
- React Fiber详解
问题是什么? 我们先看一个例子: https://claudiopro.github.io/react-fiber-vs-stack-demo/stack.html 在上面这张图片中,页面出现一卡一卡 ...
最新文章
- LeetCode--024--两两交换链表中的节点(java)
- C#泛型-泛型集合DictionaryK,V
- socket缓冲区以及阻塞模式详解
- 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation
- 近来接连换了U盘、剃须刀,京东服务确实好
- RAID 的各种方案
- 电线电缆行业MES解决方案
- 使用 bioMart 包获取数据库信息
- QtSQL的使用心得
- 计算机连接苹果手机不能找到照片目录,苹果手机上照片在电脑找不到了怎么办...
- C# winform 魔兽MH全图制作教程(3):魔兽1.20E.1.24B.1.24E全图内存地址 转自breeze...
- 计算机毕业设计太难做不出来怎么办?
- C# 克隆(Clone)中的深拷贝和浅拷贝
- 码元速率的盲估计-包络谱法
- Satwe楼板能用弹性模计算吗_PKPM学习笔记,或许半辈子都能用上
- VLDB‘22 HiEngine极致RTO论文解读
- 虎年啦,小老虎带你4.5分钟彻底掌握Linux中的创建-目录-文件(mkdir-touch)
- 西瓜皮——被丢掉的真金白银,夏天的健康守护神
- 阿里“来往”的产品战略方向
- 【多线程】优雅使用线程池结合CompletableFuture实现异步编排
热门文章
- JavaScript中this面试题, 四道题彻底清楚this指向问题
- Linux下如何查看版本信息, 包括位数、版本信息以及CPU内核信息、CPU具体型号
- OpenFlow:简述对OpenFlow协议的认识
- Windows 2000/XP 系统对U盘的处理过程入手,逆向彻底消除U盘使用痕迹
- 通过2DAO 投资二级市场的机会与潜力
- python使用numpy碰到的维度问题
- java中滚动条样式,CSS3自定义滚动条样式 -webkit-scrollbar
- Java 格式化 XML
- 谷歌的愚人节玩笑开大了
- 微软CRM 开发学习笔记 使用c#编写插件(plugin)的方式实现页面执行操作