站長資訊網
        最全最豐富的資訊網站

        react中可以使用事件總線嗎

        react中可以使用事件總線;react使用事件總線可以用于解決跨組件之間的事件傳遞,可以利用一個使用較多的庫events來完成對應的操作,利用npm或者yarn可以安裝events,語法為“npm install events”和“yarn add events”。

        react中可以使用事件總線嗎

        本教程操作環境:Windows10系統、react17.0.1版、Dell G3電腦。

        react中可以使用事件總線

        react 事件總線解決的問題:跨組件之間的事件傳遞

        在React開發中如果有跨組件之間的事件傳遞,應該如何操作?

        A、在Vue中我們可以通過Vue的實例,快速實現一個事件總線(EventBus),來完成操作;

        B、在React中可以依賴一個使用較多的庫 events 來完成對應的操作;

        如何實現

        借助第三方庫 events來實現

        常見的 api

        創建EventEmitter對象:eventBus對象

        發出事件:eventBus.emit(“事件名稱”, 參數列表)

        監聽事件:eventBus.addListener(“事件名稱”, 監聽函數)

        移除事件:eventBus.removeListener(“事件名稱”, 監聽函數)

        使用前需要先安裝,下面兩種方式任選一個

        npm install events  yarn add events

        events實踐:

        首先新建一個文件QcEventEmitter.js,文件內容如下:

        import { EventEmitter } from 'events' class QcEventEmitter extends EventEmitter {}; export default new QcEventEmitter();

        下面將實現EventTest組件向Person組件傳遞事件:

        EventTest文件內容

        A、EventTest組件中引入QcEventEmitter

        B、在點擊事件中通過QcEventEmitter.emit來發送事件

        import React, { Component } from 'react'; import QcEventEmitter from 'common/utils/QcEventEmitter' class EventTest extends Component {   render() {     return (       <div>         <button onClick={e => this.btnCLick()}>測試event事件</button>       </div>     );   }   btnCLick(){     QcEventEmitter.emit('contextClick', 'Lucy', '99')   } }

        export default EventTest;

        Person文件內容

        A、Person組件中引入QcEventEmitter,

        B、在componentDidMount中通過QcEventEmitter.addListener來監聽事件,

        C、在 componentWillUnmount中通過QcEventEmitter.removeListener移除對事件的監聽

        import React, { Component, useContext } from 'react'; import QcEventEmitter from 'common/utils/QcEventEmitter' class Person extends Component {   componentDidMount(){     QcEventEmitter.addListener("contextClick", this.headerClick)   }   componentWillUnmount() {     QcEventEmitter.removeListener("contextClick", this.headerClick)   }   headerClick(name, age) {     console.log(name, age);   }   render() {     return (       <div>        <h2>這是Person子組件</h2>       </div>     );   } } export default Person;

        在App.js文件中渲染EventTest組件和Person組件(Person組件渲染后,就可以監聽EventTest發出的事件了,他們之間并不需要任何依賴)

        import React from 'react'; import ContetTest from './pages/contenxt' import Person from 'pages/contenxt/person' function App() {   return (     <div className="App">       <ContetTest />       <Person />     </div>   ); } export default App;

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 丁香色婷婷国产精品视频| 午夜成人精品福利网站在线观看 | 亚洲av成人无码久久精品| 亚洲精品免费观看| 精品无码无人网站免费视频| 三级高清精品国产| 国产一区二区三区欧美精品| 色综合久久综精品| 国产精品久久久久影院色| 久久精品无码一区二区无码| 亚洲国产成人乱码精品女人久久久不卡| 国产高清一级毛片精品| 四虎影视国产精品永久在线| 国语自产少妇精品视频蜜桃| 午夜精品一区二区三区免费视频 | 国内精品久久久久影院优 | 国产精品毛片无码| 93精91精品国产综合久久香蕉| 精品久久777| 精品国产_亚洲人成在线高清| 国产精品美女久久久m| 国产午夜无码精品免费看动漫| 婷婷精品国产亚洲AV麻豆不片| 亚洲日韩国产AV无码无码精品| 亚洲国产精品丝袜在线观看| 亚洲综合精品网站在线观看| 无码乱码观看精品久久 | www亚洲欲色成人久久精品| 久久久久四虎国产精品| 久久精品国产影库免费看| 精品久久久久久国产| 亚洲精品成人av在线| 8050免费午夜一级国产精品| 94久久国产乱子伦精品免费| 国产精品高清在线| 国产午夜亚洲精品理论片不卡| 国产在线精品一区二区高清不卡| 国产一区二区三区在线观看精品| 久久青青草原精品国产软件| 亚洲国产精品无码久久久久久曰| 亚洲精品乱码久久久久久蜜桃图片|