首页 > 其他分享 >React:消息订阅(subscribe)-发布(publish)机制

React:消息订阅(subscribe)-发布(publish)机制

时间:2023-02-08 10:55:42浏览次数:60  
标签:订阅 item publish React subscribe 消息 pubsub PubSub

发布类似触发事件, 订阅类似监听事件

使用这种方式的好处是,兄弟组件间通信不必再像使用props那种通过父组件来通信,多层组件之间通信也不必在一层一层的传递, 直接在触发事件的组件中发布消息 监听组件中订阅消息即可;

    1、工具库: PubSubJS

    2、下载: npm install pubsub-js --save 

    3、使用:

import PubSub from 'pubsub-js' //引入
PubSub.publish('delete', data) //发布消息
PubSub.subscribe('delete', function(data){ }); //订阅

 

示例:

import { Component } from 'react' 
import PubSub from "pubsub-js"; 
class App extends Component {
 
  SubscribeList = ['POSErrorMessage'];  // 订阅消息集合

  componentDidMount () {
// 开启订阅消息
this.SubscribeList.forEach(item => {
PubSub.subscribe(item, this.subscribeCallback); // 开启订阅
}) } componentWillUnmount() { this.SubscribeList.forEach(item => { // 取消消息订阅 PubSub.unsubscribe(item); }) } componentDidShow () { // 开启订阅消息加载等待进度, componentDidMount 添加消息订阅 this.SubscribeList.forEach(item => { PubSub.subscribe(item, this.subsribeCallback); }) }/** * 订阅的回调函数 @subscribeName 订阅的消息名称, @data 数据 * */ subsribeCallback = (subscribeName, data) => { if (subscribeName === 'POSErrorMessage') { } } // 在 App 类中的 render() 函数没有实际作用 // 请勿修改此函数 render () { return ( <div></div> ) } } export default App

 

发布消息:

import PubSub from "pubsub-js";
PubSub.publish('POSErrorMessage', '消息内容') //发布消息

 

注意: 页面卸载得时候记得卸载unsubscribe取消订阅,否则消息还是会被监听

 

 

标签:订阅,item,publish,React,subscribe,消息,pubsub,PubSub
From: https://www.cnblogs.com/wind-wang/p/17100960.html

相关文章

  • React.Component详细 API(生命周期)
    前言:几年不用react,已发生翻天覆地变化,比如生命周期的方法,现在重写学习,记录变化。  组件的生命周期每个组件都包含“生命周期方法”,你可以重写这些方法,以便于在运行......
  • vue3 | shallowReactive 、shallowRef、triggerRef
    shallowReactive使用reactive声明的变量为递归监听,使用shallowReactive声明的变量为非递归监听(通俗的讲就是reactive创建的对象将会被vue内部进行递归监听,可以监......
  • ReactiveCocoa小结
    ReactiveCocoa(简称RAC)是由GitHub团队开源的一套基于Cocoa的并且具有FRP特性的框架。FRP(FunctionalReactiveProgramming)即响应式编程。RAC就是一个第三方库,使用它可以大大......
  • #yyds干货盘点 歌谣学前端之react三个api之一
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • #yyds干货盘点 歌谣学前端之react三个api之一续集
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • react-virtualized实现高效虚拟滚动,并快速定位到当前位置(类似手机通讯录)
    1、官方参考https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md 2、效果   安装<=raact16npminstallreact-virtualized--sav......
  • React dashboard UI components library All In One
    ReactdashboardUIcomponentslibraryAllInOne仪表板UI组件库TremorTheReactlibrarytobuilddashboardsfast#beta⚠️$npminstall@tremor/react......
  • laravel框架php artisan vendor:publish的作用
     场景在使用laravel框架的时候phpartisanvendor:publish#可以把对应的服务提供者的资源文件,复制到指定的路径下。 一般用法phpartisanvendor:publish--pr......
  • 阿里前端一面必会react面试题总结
    React中怎么检验props?验证props的目的是什么?React为我们提供了PropTypes以供验证使用。当我们向Props传入的数据无效(向Props传入的数据类型和验证的数据类型不符)就会在控......
  • React中使用路由
     安装:npminstallreact-router-domlocalforagematch-sortersort-by 声明router当安装好路由后就需要在main.js中声明以便可以引入importrouterfrom"./ro......