美文网首页react
react父子组件二次通信失败

react父子组件二次通信失败

作者: 冰清沧雨 | 来源:发表于2018-09-28 11:12 被阅读0次

问题描述:

(1) 首先父组件index.js向子组件Content.js传递信息,子组件可以得到父组件传递过来的的数据;

<div>
    <Content
        {...{ loading, sortRule, flightInfos, success, departDate, departCity, arriveCity }}
        onChange={(sortRule) => {
            this.setState({ sortRule }, () => this.init())
        }}
    />
</div>

(2) 然后子组件通过回调函数onChange向父组件传递数据;

state = {
    sortRule: this.props.sortRule
}

sortHandle = sortRule => {
    this.props.onChange(sortRule)
    this.setState({
        sortRule
    })
}

render() {
    const { sortRule } = this.state
    return(
        <li onClick={() => this.sortHandle(sortRule === '2' ? '1' : '2')}>
    )
}

(3) 子组件的回调函数onChange触发了this.setState事件,sortRule的值发生改变,再次调用子组件Content.js。 最后却发现子组件中的sortRule值没变。

解决思路

想到react的生命周期componentWillReceiveProps方法,只要props发生变化,该方法就会被调用,在这里面执行this.setState({ sortRule })

解决方法

在子组件Content.js里面加上:

componentWillReceiveProps(nextProps) {
    const { sortRule } = nextProps
    if (sortRule !== this.state.sortRule) {
        this.setState({ sortRule })
    }
}

相关文章

  • react父子组件二次通信失败

    问题描述: (1) 首先父组件index.js向子组件Content.js传递信息,子组件可以得到父组件传递过来的...

  • React父子组件间通信的实现方式

    React学习笔记之父子组件间通信的实现:今天弄清楚了父子组件间通信是怎么实现的。父组件向子组件通信是通过向子组件...

  • 「React Native」Event Bus,消息总线

    (一)父子间组件通信:   一般使用props,回调函数进行通信。(二)跨组件之间通信:  (1)React Na...

  • react 组件通信

    概述 react中的组件通信问题,根据层级关系总共有四种类型的组件通信:父子组件、爷孙组件、兄弟组件和任意组件。前...

  • React入门基础知识总结

    1.React组件 function组件, class组件,来自ES6的class语法, 2. 父子组件通信 父组...

  • vue中的组件通信

    一、组件通信(组件传值) 1.1父子组件通信 1.2子父组件通信 1.3非父子组件通信(兄弟组件通信)

  • React02-组件通信

    React父子组件之间如何通信父组件传一个函数给子组件,子组件在适当的时候调用这个函数React爷孙组件之间如何通...

  • React 父子组件通信

    通讯是单向的,数据必须是由一方传到另一方。 1.父组件与子组件间的通信。 在 React 中,父组件可以向子组件通...

  • react父子组件通信

    父组件通过props 给子组件传递数据,子组件则是通过调用父组件传给它的函数给父组件传递数据。

  • react父子组件通信

    父组件向子组件通信 回调函数 直接把函数传到组件里面,然后组件里面调用this.props.goDetail函数来...

网友评论

    本文标题:react父子组件二次通信失败

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