美文网首页
父子组件间通信

父子组件间通信

作者: cilec | 来源:发表于2017-08-08 23:10 被阅读0次

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

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'))

相关文章

网友评论

      本文标题:父子组件间通信

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