美文网首页
React 学习笔记

React 学习笔记

作者: 逛简书的小强 | 来源:发表于2018-11-01 16:24 被阅读0次

1. 跨组件向子组件传值的新方案

通过context可以实现

//根组件
class MessageList extends React.Component {
  getChildContext() {
    return {color: "purple",text: "item text"};
  }

  render() {
    const children = this.props.messages.map((message) =>
      <Message text={message.text} />
    );
    return <div>{children}</div>;
  }
}

MessageList.childContextTypes = {
  color: React.PropTypes.string
  text: React.PropTypes.string
};

//中间组件
class Message extends React.Component {
  render() {
    return (
      <div>
        <MessageItem />
        <Button>Delete</Button>
      </div>
    );
  }
}

//孙组件(接收组件)
class MessageItem extends React.Component {
  render() {
    return (
      <div>
        {this.props.text}
      </div>
    );
  }
}

MessageItem.contextTypes = {
  text: React.PropTypes.string
};

class Button extends React.Component {
  render() {
    return (
      <button style={{background: this.context.color}}>
        {this.props.children}
      </button>
    );
  }
}

Button.contextTypes = {
  color: React.PropTypes.string
};

2. 克隆子组件

  1. 用途
    可以给子组件包裹props 比如包裹一个权限配置等等
  2. 注意点
    \color{red}{ 只能对this.props.children元素生效 }
  3. 使用方式
React.Children.map(this.props.children, (child) => React.cloneElement(child, {
  msg: '新添加的props数据'
  ...
  ...
}))

3. 子组件children的相关操作

  1. React.Children.map 遍历子元素 并返回数组
object React.Children.map(object children, function fn [, object context])

使用方法:
React.Children.map(this.props.children, function (child) {
    return <li>{child}</li>;
})
  1. React.Children.forEach 遍历子元素 并返回数组
React.Children.forEach(object children, function fn [, object context])
  1. React.Children.count 获取子元素的个数
React.Children.count(object children) 
  1. React.Children.only 返回 children 中 仅有的子级。否则抛出异常。
console.log(React.Children.only(this.props.children[0])); 
//输出对象this.props.children[0]

相关文章

网友评论

      本文标题:React 学习笔记

      本文链接:https://www.haomeiwen.com/subject/tfntxqtx.html