您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關React如何實現無嵌套組件通信,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
當兩個組件互不嵌套,處在同個層級或者不同層級上,他們之間要進行通信,有以下幾種常用方法
1、某個組件先將值傳到同一個父組件,然后在通過父組件傳給另外一個組件,用到父子組件傳值
2、使用緩存sessionStorage、localStorage等
3、如果兩個組件之間存在跳轉,可以使用路由跳轉傳值,附上詳細用法
React學習筆記 -- 組件通信之路由傳參(react-router-dom)_前端菜小白leo的博客-CSDN博客
4、event(發布--訂閱)
首先,安裝event
npm install event -save
新建一個event.js
import { EventEmitter } from 'events'; export default new EventEmitter();
然后另兩個組件處于同層級(不同個父組件或者不同層級都可以)
import React from 'react'; import Grandson from './Grandson'; import GrandsonOther from './GrandsonOther'; class Children extends React.Component { render(){ return ( <div> <Grandson></Grandson> <GrandsonOther></GrandsonOther> </div> ) } } export default Children
組件一,導入event,在componentDidMount階段添加監聽addListener(訂閱),在componentWillUnmount移除監聽removeListener,事件名稱與組件二中emit一致。
import React from 'react'; import event from '../event'; import { Button } from 'element-react' class Grandson extends React.Component { constructor(props) { super(props); this.state = { msg:'' } this.toOther = this.toOther.bind(this) } toOther(){ event.emit('eventMsg','通過evnet傳過來的值') } render(){ return ( <div style={{backgroundColor:'#13ce66',padding:'10px',width:'200px',margin:'auto',marginTop:'20px'}}> <p>組件二</p> <span style={{color:'blue'}}>{this.state.msg}</span> <div><Button onClick={this.toOther}>event傳值</Button></div> </div> ) } } export default Grandson
組件二,導入event,按鈕綁定方法,使用event.emit觸發(發布)事件。
import React from 'react'; import event from '../event'; import { Button } from 'element-react' class Grandson extends React.Component { constructor(props) { super(props); this.state = { msg:'' } this.toOther = this.toOther.bind(this) } toOther(){ event.emit('eventMsg','通過evnet傳過來的值') } render(){ return ( <div style={{backgroundColor:'#13ce66',padding:'10px',width:'200px',margin:'auto',marginTop:'20px'}}> <p>組件二</p> <span style={{color:'blue'}}>{this.state.msg}</span> <div><Button onClick={this.toOther}>event傳值</Button></div> </div> ) } } export default Grandson
點擊按鈕,組件二發布事件,組件一監聽(訂閱)事件,更新內容。(如果交換發布者訂閱者身份,寫法一致)
注意:如果兩個組件使用event進行通信,確保發布訂閱的事件名稱一致,如上例中 eventMsg
關于“React如何實現無嵌套組件通信”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。