react children

children

react 中,属性名是一一对应的,除了children。

对于一个组件来说,其this.props.children拿到的是什么呢???举个🌰

<Grid>
  <Row />
  <Row />
  <Row />
</Grid>

// 在Grip中,拿到的children就是三个Row

注意:任何东西,都可以作为children, 举例:

<Grid>
  Here is a row:
  <Row />
  Here is another row:
  <Row />
  {() => <h1>Hello World!</h1>}
</Grid> // 字符串 和<Row>, 甚至最后一个箭头函数 都是Grid的children

我的使用举例:

// 场景是,每个页面都有一个title,这个title都有一样的样式,但是里面文字不一样,或者有些多个button 等待,因此,我写了一个Title的组件,这个组件我用css文件,设置了样式。这样实现了,我在一个地方设置样式,这样传入不同文字显示就行了。
// 不需要每一个页面里都写样式了。
// Title组件 export default class Title extends React.Component { render() { return ( <div className='title'> {this.props.children} </div> ) } } // 页面中的使用:
render() {return ( <div className='my_indicator_container'> <Title> 我的指标 <Button type="primary" onClick={this.handleClick} style={{ float: 'right' }}>指标登记</Button> </Title> </div> ) }

// 第二个页面:
return (
  <div className='adhocContainer'>
    <Title>
      Ad-hoc
      <Popover content={content} placement='right' trigger='hover' style={{ marginLeft: 16 }}>
        <Icon name='problem-circle-o' style={{ fontSize: '18px' }} />
      </Popover>
    </Title>
  </div>
)
 
// 是不是很方便啊,开心脸~

我的使用很方便,react提供了很多操纵children的方法:

循环:React.Children.map 以及 React.Children.forEach 

计数: React.Children.count 栗子:

  render() {
    return <p>React.Children.count(this.props.children)</p>
  }

转换为数组(如果你需要排序): React.Children.toArray

class Sort extends React.Component {
  render() {
    const children = React.Children.toArray(this.props.children)
    // Sort and render the children
    return <p>{children.sort().join(' ')}</p>
  }
}

 

参考文章: https://segmentfault.com/a/1190000011527160

posted @ 2018-12-12 20:13  迪迪的博客  阅读(618)  评论(0编辑  收藏  举报