当前位置: 首页 > news >正文

网站建设需求文档模版徐州cms建站模板

网站建设需求文档模版,徐州cms建站模板,人武部正规化建设方案,山东济宁做网站的公司React项目中使用发布订阅模式 1.创建发布订阅器2.在组件中使用发布订阅器3. 订阅数据 发布订阅模式(也称观察者模式)是一种管理跨组件通信的有效方式,尤其是在不希望直接依赖于特定组件的情况下。这种模式允许一个对象(发布者&…

React项目中使用发布订阅模式

  • 1.创建发布订阅器
  • 2.在组件中使用发布订阅器
  • 3. 订阅数据

发布订阅模式(也称观察者模式)是一种管理跨组件通信的有效方式,尤其是在不希望直接依赖于特定组件的情况下。这种模式允许一个对象(发布者)通知多个其他对象(订阅者),而不必知道这些对象是谁或他们在哪里。这有助于解耦组件,使得代码更加模块化和可维护。

1.创建发布订阅器

创建一个发布订阅器类,负责管理时间的注册、取消和触发

# js
class PubSub {constructor(){this.events = {}}subscribe(event, callback){if(!this.events[event]){this.events[event] = []}this.events[event].push(callback)}unsubscribe(event,callback){if(this.events[event]){this.events[event] = this.events[event].filter(cb => cb !== callback)}}publish(event,data){if(this.events[event]){this.events[event].forEach(callback => callback(data))}}
}const pubsub = new PubSub()
# tsinterface EventMap {[eventName: string]: any;
}class EventCenter {private listeners = {}constructor(){this.listeners = {}}subscribe<T extends keyof EventMap>(event: T, callback: (data?: EventMap[T]) => void) {if(!this.listeners[event]) {this.listeners[event] = []}this.listeners[event].push(callback)}publish<T extends keyof EventMap>(event: T, data?: EventMap[T]) {const callbacks = this.listeners[event]if(callbacks) {callbacks.forEach(callback => {callback(data)})}}unsubscribe<T extends keyof EventMap>(event: T, callback?: (data: EventMap[T]) => void) {const callbacks = this.listeners[event];if (callbacks) {if (callback) {this.listeners[event] = callbacks.filter(cb => cb !== callback);} else {delete this.listeners[event];}}}
}export default new EventCenter()

2.在组件中使用发布订阅器

在你的React组件中使用这个发布订阅器。例如,一个组件可以订阅事件以接收数据,而另一个组件可以发布事件来发送数据。假设你有一个按钮组件,当点击时,他会触发一个事件发送一些数据

import React from 'react';
import { pubsub } from './pubsub'; // 引入上面定义的PubSub实例class ButtonComponent extends React.Component {handleClick = () => {pubsub.publish('dataUpdated', { message: 'Hello World!' });};render() {return (<button onClick={this.handleClick}>Click me!</button>);}
}

3. 订阅数据

另一个组件可以订阅这个事件,并在接收到数据时执行某些操作

import React, { useEffect, useState } from 'react';
import { pubsub } from './pubsub'; // 引入上面定义的PubSub实例interface DisplayProps {}
interface DisplayState {message: string;
}const DisplayComponent: React.FC<DisplayProps> = () => {const [message, setMessage] = useState('');useEffect(() => {const handleDataUpdate = ({ message }: { message: string }) => {setMessage(message);};pubsub.subscribe('dataUpdated', handleDataUpdate);return () => {pubsub.unsubscribe('dataUpdated', handleDataUpdate);};}, []);return <div>{message}</div>;
};export default DisplayComponent;
http://www.yayakq.cn/news/281245/

相关文章:

  • wordpress+下载售卖保山网站建设优化
  • 大型网站建设兴田德润专业两个网站链接如何做
  • 可以进入任何网站的浏览器建立网站接受投注是什么意思
  • 做视频素材怎么下载网站有哪些做的比较好的网站
  • 网站标题titleseo推广人员
  • 网站建设需要提供哪些信息注册企业邮箱号
  • 社团网站模板深圳百度竞价推广
  • 孟州网站开发appphp管理系统 网站模版
  • 目前好的外贸网站网站焦点图制作教程
  • 网络网站开发培训特价锦州网站建设
  • 网站开发与运行环境重庆百度推广电话
  • 利用网上菜谱做网站管理咨询公司如何开发客户
  • 百度推广和网站建设涿州市建设局网站
  • 数据库设计对网站开发的影响公司变更告知函怎么写
  • 手机网站优化怎么做广州软件开发培训机构有哪些
  • 济南网站开发公司北京网站优化厂家
  • 网站建设管理视频中国机械加工网网址
  • 做汽车网站开题报告的意义直播网站开发需要多少钱
  • 网站建设需要考哪些证网站开发知识点总结
  • 建网站公司要钱吗国家电子商务平台
  • 淳安县千岛湖建设集团网站中国优秀设计网站有哪些
  • 西宁网站运营公司五莲建设监理有限公司网站
  • 做网站80端口郴州58网站
  • 网站搭建完手机访问微信表情开放平台
  • 广州免费建站推荐网站建设调查表
  • 青岛网站建设模板下载公司建设网站需要什么条件
  • dw8 php做购物网站教程网站seo优化包括哪些方面
  • 网站建设捌金手指花总六做网站网站的推广是不是犯罪的
  • 做炒作的网站在线视频链接生成器
  • 化妆品网站开发海南百度推广开户费用