react组件通信方式

1.父组件向子组件通信:使用props

2.子组件向父组件通信:使用props回调

3.跨级组件间通信:使用context对象

    在父组件中需要设置childContextTypes(key-value 对象) 和getChildContext()(返回context对象)

    在子组件中需要设置contextTypes来获取 context, 并使用this.context来访问上下文对象

        prop-types是用来告诉 React我们的context的类型的

        childContextTypes不产生context, 只是定义context

        getChildContext()为了给context填充数据,我们需要调用这个函数


父组件
子组件

如果组件中使用构造函数(constructor),还需要在构造函数中传入第二个参数 context,并在 super 调用父类构造函数是传入 context,否则会造成组件中无法使用 context

4.非嵌套组件间通信: 使用事件订阅

非嵌套组件,就是没有任何包含关系的组件,包括兄弟组件以及不在同一个父级中的非兄弟组件。对于非嵌套组件,可以采用下面两种方式:

利用二者共同父组件的 context 对象进行通信

使用自定义事件的方式

如果采用组件间共同的父级来进行中转,会增加子组件和父组件之间的耦合度,如果组件层次较深的话,找到二者公共的父组件不是一件容易的事,这里我们采用自定义事件的方式来实现非嵌套组件间的通信。

1.我们需要使用一个 events 包:npm install events --save

2.新建一个 ev.js,引入 events 包,并向外提供一个事件对象,供通信时使用:

ev.js
父组件


子组件


你可能感兴趣的:(react组件通信方式)