react学习笔记12:this.props.children和React.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会自己解析。 同样可以获取索引,会调用启用第二个参数: 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一次: 这时候我们的第一个子节点有事件,其他的节点没有事件。 我们可以console.log(child)加入更多处理判断。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |