react学习笔记12:this.props.children和React.Children

React.Children 是顶层API之一,为处理 this.props.children 这个封闭的数据结构提供了有用的工具。

this.props 对象的属性与组件的属性一一对应,但是有一个例外,就是 this.props.children 属性。它表示组件的所有子节点。

1.React.Children.map

我们已经知道React.Children是为了处理this.props.children准备的,

React.Children.map他就是为了遍历我们的子节点,这样才可以加入一些功能(比如事件处理):

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import registerServiceWorker from './registerServiceWorker';


//设置组件
class Slot extends React.Component {
	
	
	render() {	
		
		return <div>
			{
				React.Children.map(this.props.children, function (child) {
					return <div>{child}</div>;
				})
			}
		</div>
	}

	
	
}

ReactDOM.render(
    <div>
		<Slot><span>分发内容1</span><span>分发内容2</span><span>分发内容3</span></Slot>
	</div>,
    document.getElementById('root')
);
registerServiceWorker();

React.Children.map循环我们的this.props.children,在回调会得到child对象,render会自己解析。

同样可以获取索引,会调用启用第二个参数:

152139_gswB_2352644.png

2.为什么使用React.Children.map

拿上面的举例子,我们分发含有三个子节点,我想给第一个子节点加一个点击事件,这样我们的React.Children.map的作用就体现出来了:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import registerServiceWorker from './registerServiceWorker';


//设置组件
class Slot extends React.Component {
	
	alertval() {
		alert("我是第一个")
	}
	render() {	
		
		return <div>
			{
				React.Children.map(this.props.children, function (child,index) {
					if(index===0){
						return <div onClick={this.alertval}>{child}索引{index}</div>;
					}else{
						return <div>{child}索引{index}</div>;
					}
					
				}.bind(this))
			}
		</div>
	}

	
	
}

ReactDOM.render(
    <div>
		<Slot><span>分发内容1</span><span>分发内容2</span><span>分发内容3</span></Slot>
	</div>,
    document.getElementById('root')
);
registerServiceWorker();

这里是注意点,避免this的指向问题,我们必须给map的回调函数bind一次:

152637_UNQK_2352644.png

这时候我们的第一个子节点有事件,其他的节点没有事件。

我们可以console.log(child)加入更多处理判断。

转载于:https://my.oschina.net/tbd/blog/1544798

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值