React组件之间的通信方式

一、通过props传递

  • 共同的数据放在父组件上, 特有的数据放在自己组件内部(state)
  • 通过props可以传递一般数据和函数数据, 只能一层一层传递,即单向单层传递
  • 一般数据

          父组件传递数据给子组件-->子组件读取数据

  • 函数数据

         子组件传递数据给父组件-->子组件调用函数

总结:

父子组件之间的通信,使用props属性。其中只能由父组件传递到子组件(单向)。如果子组件向要传递数据给父组件,只能通过回调函数的方式进行。

兄弟组件不能直接通信,只能通过共有的父组件间接完成通信。

使用props进行通信适用于组件的层级不是很多,传递的数据不是很复杂的情况。

二、消息订阅(subscribe)-发布(publish)机制

接收数据方为消息订阅(subscribe)者,数据发布(产生)方为消息发布(publish)者。

这种方式可以跨层级进行通信。使得任意两个组件通信成为可能。

在JavaScript中,使用第三方库 PubSubJS完成消息订阅-发布机制。

文档: https://github.com/mroderick/PubSubJS

PubSubJS使用方法:

1. 安装

npm install pubsub-js --save

2. 使用

// 引入
import PubSub from 'pubsub-js'

 

// 订阅
PubSub.subscribe('delete', function(msg, data){ });

 

// 发布消息
PubSub.publish('delete', data)

主要API

PubSub.subscribe(topic, callback)

订阅消息

参数:

topic

消息名称

callback

收到消息时的回调处理函数,接收两个参数:

msg

消息名称

data

发布者发出的数据

返回值

返回一个token,可以用于取消订阅

 

PubSub.publish(topic, data)

发布消息

参数:

topic

消息名称,消息发布者和订阅者所定义的消息名必须一样,否则接收不到消息

data

发布者发出的数据

 

PubSub.unsubscribe(token)

用来取消消息订阅

参数:

token

subscribe()的返回值

三、Redux

这个就不用过多介绍了,大名鼎鼎的redux,一个独立的专门用于状态管理的库。结合React能够完成大型复杂的项目。

posted on 2019-07-17 16:57  勇士_Curry  阅读(1749)  评论(0编辑  收藏  举报