父子组件间通信

父→子
传送子组件的属性是父组件传递的,动态修改父组件的值,子组件也会对应的变化

const Item = React.createClass({
  render () {
    let style = this.props.actived ? { 'border': '1px solid green' } : {}
    return <li style={style}>{this.props.name}</li>
  }
})
const Comp = React.createClass({
  getInitialState () {
    return { 'list': [] }
  },
  componentWillMount () {
    //组件装载前修改传入的data
    this.state.list = this.props.data.map(item => {
      return { 'name': item, 'actived': false }
    })
  },
  componentDidMount () {
    //装载完毕三秒后第二个会加上边框
    setTimeout(() => {
      this.state.list[1].actived = true
      this.forceUpdate()
    }, 3000)
  },
  render () {
    return <ul>{this.state.list.map(item => {
      console.log(item)
      return <Item key={item.name} actived={item.actived} name={item.name} />
    })}</ul>
  }
})
const List = ['AAA', 'BBB', 'CCC', 'DDD']
ReactDOM.render(<Comp data={List} />, document.getElementById('root'))
图片.png
图片.png

子→父
父组件将自身方法作为props传给子组件,可以让其调用。ps:记得绑定this

const Item = React.createClass({
  render () {
    let style = this.props.actived ? { 'border': '1px solid green' } : {}
    //onClick触发的方法为父组件传递的方法
    return <li onClick={this.props.click} style={style}>{this.props.name}</li>
  }
})
const Comp = React.createClass({
  getInitialState () {
    return { 'list': [] }
  },
  componentWillMount () {
    this.state.list = this.props.data.map(item => {
      return { 'name': item, 'actived': false }
    })
  },
  componentDidMount () {
    setTimeout(() => {
      this.state.list[1].actived = true
      this.forceUpdate()
    }, 3000)
  },
  clickHandler (item) {
    alert(item.name)
  },
  render () {
    return <ul>{this.state.list.map(item => {
      console.log(item)
        //把clickHandler作为props.click传递给Item,此处绑定了this
      return <Item key={item.name} click={this.clickHandler.bind(this, item)} actived={item.actived} name={item.name} />
    })}</ul>
  }
})
const List = ['AAA', 'BBB', 'CCC', 'DDD']
ReactDOM.render(<Comp data={List} />, document.getElementById('root'))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 父子通信目前有四种方式: 1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现父...
    JackWhite阅读 8,152评论 0 15
  • React学习笔记之父子组件间通信的实现:今天弄清楚了父子组件间通信是怎么实现的。父组件向子组件通信是通过向子组件...
    小松鼠hust阅读 3,777评论 0 1
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,088评论 0 29
  • 9.1 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,...
    白水螺丝阅读 828评论 0 2
  • 在教室里,他一直在发呆。因为他总是写作文写不好,为此,他非常苦恼:世界上为什么会有作文这种东西!为什么不变成西瓜一...
    华府阅读 414评论 0 0