【JAVASCRIPT】React学习-巧用 props 的 children 属性实现内容填充
背景
平常写组件,经常遇到需要获取内容放入组件内部的情形。
实现方法
我们有两种实现方式
1. 自定义 props
render 的时候通过获取 this.props.content 填充到组件内部
const content = (<ul><li><span>分析1<span></li><li><span>分析1<span></li></ul>);
<Panel content={content} />
render () {
return (<div>
{this.props.content}
</div>);
}
2. 利用 props 的 children
一般 props 是与用户定义的组件一一对应,但有一个例外 children ,表示组件内部的所有子节点。我们可以利用这个 props 属性,省略自定义content属性,直接获取this.props.children填充入组件。
这种方法的好处在于层级关系明显,因为内部节点有时候会很复杂,如果用自定义props属性,没法很快看清楚节点之间的包含关系。
注意点:
this.props.children 的值有三种可能,处理 this.props.children 的时候要注意判定:
- 1) 如果当前组件没有子节点,是 undefined ;
- 2)如果有一个子节点,数据类型是 object ;
- 3)如果有多个子节点,数据类型就是 array 。
<Panel>
<ul>
<li><span>分析1<span></li>
<li><span>分析1<span></li>
</ul>
</Panel>
render () {
return (<div>
{this.props.children}
</div>);
}
升级版,采用React.Children.map避免掉入this.props.children的坑
<Panel>
<span>分析1<span>
<span>分析1<span>
</Panel>
render() {
return (<div>
<ul>
{
React.children.map(this.props.children, (child)=>{
return (<li>{child}</li>);
});
}
</ul>
</div>);
}
React.children 的方法
官方文档: https://facebook.github.io/react/docs/react-api.html#react.children.map
- React.Children.map(children, function[(thisArg)]) 返回处理后的节点array
- React.Children.forEach(chidlren, function[(thisArg)]) 不返回处理后的节点array,仅遍历节点,多用于处理数据!!!!
- React.chidlren.count(children) 返回children个数
- React.Children.only(children) 仅接受单个节点,超过一个报错
- React.Chidlren.toArray(children) 把dom节点数组话,多用于render时slice节点
【JAVASCRIPT】React学习-巧用 props 的 children 属性实现内容填充的更多相关文章
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- javascript基础学习系列-DOM盒子模型常用属性
最近在学习DOM盒子模型,各种属性看着眼花缭乱,下面根据三个系列来分别介绍一下: client系列 clientWidth :width+(padding-left)+(padding-right)— ...
- React学习笔记-04 props
props实现从父组件与子组件的通信. 可以通过getDefaultProps初始化props. React 提供了propsTypes来验证props的类型 官方API: propTypes:fun ...
- 【JAVASCRIPT】React学习-JSX 语法
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 JSX 语法 1. 定义 JSX 是javascript + xml 的合集,我们可以将javascript 与 ht ...
- 【JAVASCRIPT】React学习-如何构建一个组件
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 组件化思想 组件就是 UI + UI 交互逻辑,组件有三个常规map , 分别为state 状态 . props 数据 ...
- 【JAVASCRIPT】React学习- 数据流(组件通信)
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...
- React中的this.props.children
React this.props.children this.props对象的属性与组件的属性一一对应,但是有一个例外,就是this.props.children属性.它表示组件的所有子节点. var ...
- 【JAVASCRIPT】React学习- 与 flux 结合使用
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 与flux 结合使用
- 【JAVASCRIPT】React学习- 杂七杂八
摘要 记录 React 学习中的小细节 setState setState 有一定的时间延迟,如果需要保证 setState 之后执行某些动作,可以采用以下方法 this.setState({ vis ...
随机推荐
- SQL Server各个版本的区别
SQLEXPR_x64_CHS.exe,标准SQL Server Express edition,只有数据库引擎,甚至连图形管理界面都没有.SQLEXPRWT_x64_CHS.exe,多了一个图形管理 ...
- io-nio 区别示意图
no:一个线程管理多个连接请求并且一个线程在处理事情,需要一个一个处理连接. nio:由一个 bOSS 线程连接分发,分发至每个工作线程,工作线程接收到请求后直接负责连接任务的处理,多线程任务处理机制 ...
- Java IO学习笔记一
Java IO学习笔记一 File File是文件和目录路径名的抽象表示形式,总的来说就是java创建删除文件目录的一个类库,但是作用不仅仅于此,详细见官方文档 构造函数 File(File pare ...
- 关于 asp.net 点击确定按钮 获取不到新值问题
点击事件内,可以使用request.form[" kk"] 获取到值,但是this.txt.Text 确实旧值, 尼玛,居然没加isPostBack重新加载了数据 ,request ...
- 用CSS美化checkbox复选按钮和raido单选按钮-适用于移动端
最终效果: 实现方法 index.html: <!DOCTYPE html> <html> <head> <title></title> & ...
- jquery移出select指定option
$("#selectLine option[value!='']").remove();
- 【LeetCode】2. Two Sum
题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...
- android app调试没问题,但打包签名的apk,运行时出现闪退怎么办?
在用Eclipse编写Android app时,有时调试时没有问题,但一经打包签名,运行就出现闪退,还报错说找不到某某类.一开始以为是混淆导致的,后来我没有混淆竟然也还是这个问题.无奈只得网上寻找解决 ...
- 8.Smarty的条件判断语句的写法
{if $newObj eq 'a'} welcome a {elseif $a eq 'b'} welcome b {else} welcome others {/if}
- Linux离线安装Ruby详解
很多时候我们会发现,真实的生成环境很多都没有外网,只有内网环境,这个时候我们又需要安装Ruby,则不能提供yum命令进行在线安装了,这个时候我们就需要下载安装包进行离线安装.本文主要简单介绍如果离线安 ...