Web前端开发网

fly63.com

首页 资源 工具 文章 教程 栏目
  • 在线搜索
  • 文章标签
  • 广告合作
  • 赞助一下
  • 关于我们
资源推荐
趣网商城
私密生活好物,隐私配送,无痕购物
蜂小推
不扣量的项目推广平台
Trae
字节跳动推出的 AI原生编程工具
AiPPT
全智能AI一键生成 PPT
星月写作
人工智能写作助手
美图设计室
AI智能一键生成海报,免费平面设计
5118站长工具
关键词、长尾词挖掘,AI驱动的SEO内容创作辅助平台
Seedance 2.0
字节跳动新一代AI视频生成模型全面解析
奇绘馆AI视频
新一代AI视频创作平台
免费资源下载中心
一站式解决工作学习需求的宝藏网站

资源分类

AI智能 酷站推荐 招聘/兼职 框架/库 模块/管理 移动端UI框架 Web-UI框架 Js插件 Jquery插件 CSS相关 IDE环境 在线工具 图形动效 游戏框架 node相关 调试/测试 在线学习 社区/论坛 博客/团队 前端素材 图标/图库 建站资源 设计/灵感 IT资讯
网站收录 / 问题反馈

Pubsub.js

分享
复制链接
新浪微博
QQ 好友

扫一扫分享

GitHub:https://github.com/mroderick/PubSubJS
描述信息:一个用 JavaScript 编写的基于主题的 发布/订阅库
GitHub

PubSubJS 是一个用 JavaScript 编写的基于主题的 发布/订阅库。 

PubSubJS 有同步解耦,所以主题是异步发布的。这有助于使您的程序保持可预测性,因为在消费者处理主题时,主题的发起者不会被阻止。 对于喜欢冒险的人,PubSubJS 还支持同步主题发布。这可以在某些环境(浏览器,不是全部)中提供加速,但也可能导致一些非常难以推理的程序,其中一个主题触发同一执行链中另一个主题的发布。


主要特点

  • 无依赖
  • 同步解耦
  • ES3 兼容。PubSubJS 应该能够在任何可以执行 JavaScript 的地方运行。浏览器、服务器、电子书阅读器、旧手机、游戏机。
  • AMD / CommonJS 模块支持
  • 不修改订阅者(jQuery 自定义事件修改订阅者)
  • 易于理解和使用(感谢同步解耦)
  • 小(ish),小于 1kb 压缩和压缩


基本使用

首先,让我们来看看如何使用 pubsub.js 进行消息的发送与接收。首先,我们需要引入库:

import PubSub from "pubsub-js";

然后,在需要发送消息的地方,我们可以使用 publish 方法:

// 发布一个名为 'testEvent' 的事件,并带上数据
let data = { name: 'John Doe' };
PubSub.publish('testEvent', data);

而在需要接收消息的地方,我们需要先使用 subscribe 方法进行订阅:

// 订阅名为 'testEvent' 的事件
let subscription = PubSub.subscribe('testEvent', function(message, data) {
console.log("Received data:", data.name);
});
// 当不再需要接收消息时,记得取消订阅
PubSub.unsubscribe(subscription);

以上就是一个简单的消息订阅发布流程。


一些使用场景

比如:状态。

// 可以外部变更组件内状态
pubsub.publish(STATE_UPDATED_EVENT, newState);

// 在其他组件中订阅该事件以获得新状态
pubsub.subscribe(STATE_UPDATED_EVENT, (newState) => {
this.setState(newState);
});

事务处理。

// 当异步操作完成时发布事件

function subscribeTransaction() {
var subscription = PubSub.subscribe("transaction_start", async function(message, data) {
try {
// 处理事务...
await someAsyncOperation();
await someOtherAsyncOperation();
resolve(true);
} catch(e) {
reject(e);
}
});

可以设置主题。

import React, { useState, useEffect } from 'react';
import PubSub from 'pubsub-js';

function App() {
const [theme, setTheme] = useState('default');

const handleThemeChange = (nextTheme) => {
setTheme(nextTheme);
};

useEffect(() => {
const subscription = PubSub.subscribe('theme-change', handleThemeChange);
return () => {
PubSub.unsubscribe(subscription);
};
}, []);

return (
<div>
<h1>Current theme: {theme}</h1>

{/* 主题切换按钮 */}
<button onClick={() => PubSub.publish('theme-change', 'dark')}>
Switch to dark mode
</button>

{/* 这个组件会随着主题改变而变 */}
<ThemedFunctionComponent theme={theme} />
</div>
);
}

function ThemedFunctionComponent({ theme }) {
useEffect(() => {
console.log('Theme changed to:', theme);
}, [theme]);

return (
<div style={{ color: theme === 'dark' ? '#fff' : '#000' }}>
This is the themed component.
</div>
);
}

export default App;

React 的小伙伴还可以封装一个自定义 Hooks 来更简洁的使用它。


订阅完之后,别忘了取消订阅。

取消特定订阅

var mySubscriber = function (msg, data) {
console.log(msg, data);
};

var token = PubSub.subscribe('MY TOPIC', mySubscriber);

PubSub.unsubscribe(token);

取消某个函数的所有订阅

var mySubscriber = function(msg, data) {
console.log(msg, data);
};

PubSub.unsubscribe(mySubscriber);

取消某个主题的订阅

PubSub.subscribe('a', myFunc1);
PubSub.subscribe('a.b', myFunc2);
PubSub.subscribe('a.b.c', myFunc3);

PubSub.unsubscribe('a.b');
// 'a.b'和'a.b.c' 会被取消订阅
// ` a `的通知仍然会被发布

清楚所有订阅

PubSub.clearAllSubscriptions();
// 所有订阅都被删除

订阅计数

PubSub.countSubscriptions('token');

PubSub.js 通过发布/订阅模式实现实现组件间的解耦合,可以减少代码的复杂度和维护成本,使代码设计更人性化。


仅供个人学习参考/导航指引使用,具体请以第三方网站说明为准,本站不提供任何专业建议。如果地址失效或描述有误,请联系站长反馈~感谢您的理解与支持!

链接: https://fly63.com/nav/3961

更多»
热门资源
swiper
目前应用较广泛的移动端网页触摸内容滑动js插件
官网
GitHub
layer
layer是一款口碑极佳的web弹层组件
点击进入
GitHub
iScroll.js
IScroll是移动页面上被使用的一款仿系统滚动插件。
官网
GitHub
wangEditor
基于javascript和css开发的 Web富文本编辑器
官网
GitHub
ueditor
由百度web前端研发部开发所见即所得富文本web编辑器
官网
GitHub
highlight
Highlight.js 是一个用 JavaScript 写的代码高亮插件,在客户端和服务端都能工作。
官网
GitHub
UglifyJS
一个js 解释器、最小化器、压缩器、美化器工具集
官网
GitHub
lozad.js
高性能,轻量级,可配置的懒加载图片工具
官网
GitHub
Sortable.js
简单灵活的 JavaScript 拖放排序插件
官网
GitHub
validate.js
表单提供了强大的验证功能,让客户端表单验证变得更简单
官网
GitHub
Draggin.js
一款兼容移动手机的js拖拽插件
官网
GitHub
lazysizes.js
响应式图像延迟加载JS插件【懒加载】
官网
GitHub
类似于Pubsub.js的资源
dnd-kit
轻量级、模块化、可扩展的 React 拖放工具包
官网
GitHub
LangChain.js
快速构建基于大语言模型(LLM)的智能应用
官网
GitHub
Odometer.js
js数字滚动插件
官网
GitHub
packery
一个无缝,可拖动的网格布局
官网
GitHub
Summernote
一款基于jQuery+Bootstarp实现的网页文本编辑器特效
官网
GitHub
Colorify.js
可定制,Javascript 编写,小巧的取色器
官网
GitHub
got
简化的HTTP请求
点击进入
GitHub
Scene.js
一个基于 JavaScript 时间轴的动画库
官网
GitHub
目录

手机扫一扫预览

》
分享组件加载中...
首页 技术导航 在线工具 技术文章 教程资源 前端标签 AI工具集 前端库/框架 实用工具箱 广告合作 关于我们

Copyright © 2018 Web前端开发网 All Rights Reserved. 提供免费在线工具、编程学习资源(教程/框架/库),内容以学习参考为主,助您解决各类实际问题,快速提升专业能力。