一、通過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能夠完成大型復雜的項目。