阅读:2408回复:1
pubsub.publish触发一次pubsub.subscribe调用多次解决
发布订阅模式
发布订阅模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。有时候,你想监听一种状态,当在某种情况下,触发它,然后做一些相应的事,有点儿类似我们的自定义事件。订阅发布,也是解决这一类问题的利器。 我一般用到发布订阅者模式的时候,是在比如,父子传值,兄弟传值没办法满足我的需求,我需要在这个页面操作,要改变另一个不相关的页面里面的数据,这时候就用到发布订阅模式。 用法 pubsub-js ———————————————— pubsub-js publish:发布 subscribe:订阅 1、下载,要依赖于pubsub-js模块 cnpm install pubsub-js --save 2、import pubSub from "pubsub-js" 使用:发布 pubSub.publish("消息名称",“消息的内容”); 订阅者:订阅 pubSub.subscribe("消息名称",function(name,context){}) 例子: one组件中 <input type="button" value={"发布订阅者模式"} onClick={this.sendMsg}/> sendMsg(){ pubSub.publish("haha","我是发布消息的内容","hkhj") pubSub.publish("two","我是第二个发布者") } componentDidMount(){ pubSub.subscribe("two",(name,context)=>{ console.log("asfa",context) }) pubSub.unsubscribe("two");//取消订阅者接收two的消息 } two组件中 componentWillMount(){ //发布-订阅者的模式是一对多的模式,一个发布者,多个订阅者可以接收,一个订阅者,接收一个发布者 //订阅者,pubSub.subscribe第一个参数是消息名称要和发布消息名称一致才可以接受,第二个是接受参数时候收到的回调函数,接受数据时候回触发 //函数的第一个参数是消息名称,第二个是消息内容,没有第三个参数,第三参数是undefined,相传多个参数用对象在第二个参数传 pubSub.subscribe("haha",(name,context,aaa)=>{ console.log("订阅者",name,context,aaa); }) } pubsub多次调用解决 publish("消息名称",“消息的内容”); //发布一个自定义的事件 subscribe(eventName, callback); //接收一个自定义的事件,在接收的时候eventName要和发布的名称保持一致才能接收到。 unsubscribe(eventName, callback); //解除一个自定义的事件 subscribeOne(eventName, callback); //发布一个只触发一次的自定义事件 notify(eventName, callback); //触发已经发布的自定义事件 上面是关于pubsub的API,我们需要在我们每次接受数据pubsub.subscribe的时候,先执行pubsub.unsubscribe操作就好了,就完美解决了,这样你接收以后的callback只执行一次。 pubsub.unsubscribe('aa'); pubSub.subscribe("aa",(name,context,aaa)=>{ console.log("订阅者",name,context,aaa); }) |
|
沙发#
发布于:2023-12-29 14:49
|
|