前端设计模式之观察者模式
Posted cq1715584439
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端设计模式之观察者模式相关的知识,希望对你有一定的参考价值。
所谓的观察者模式我所认为的就是订阅发布。其中中间关于调度方法还有一点区别,这里就不多做叙述了
接下来给大家分享下我对所谓的发布订阅的理解吧,其实这种设计理念在react体现在了跨组件通信中,
原理就是订阅者写一个函数然后不执行,接着把其储存在某一个地方,等待着发布者去触发这个函数,然后
达到触发函数进行函数传参,从而能够达到组件之中的跨组件通信
接下来给大家分享下一个简单的封装
1 //第一种方式利用数组是比较啰嗦的 2 // const Observer= 3 // arr:[], 4 // $on(event,cb) 5 // this.arr.push([event]:cb) 6 // , 7 // $emit(event,msg) 8 // //console.log(this.arr) 9 // this.arr.forEach(item=> 10 // //console.log(Object.keys(item)) 11 // if(Object.keys(item)[0]===event) 12 // item[Object.keys(item)[0]](msg) 13 // 14 // ) 15 // 16 // 17 18 19 //第二种方式利用对象 20 21 //这种方式只能监听一次 假如我们想要监听多次可以看下下面第三种方法 22 // const Observer= 23 // arr:, 24 // $on(event,cb) 25 // this.arr[event]=cb 26 // , 27 // $emit(event,msg) 28 // this.arr[event](msg) 29 // 30 // 31 32 33 //第三种方式 多次监听的订阅者 34 const Observer= 35 arr:, 36 //订阅者监听函数 37 $on(event,cb) 38 if(this.arr[event]) 39 this.arr[event].push(cb) 40 else 41 this.arr[event]=[cb] 42 43 44 , 45 //发布者触发函数 46 $emit(event,msg) 47 this.arr[event]&&this.arr[event].forEach(cb=> 48 cb(msg) 49 ) 50 , 51 //销毁阶段 52 $delete(event) 53 delete this.arr[event] 54 55 56 57 58 59 //以下为封装检验过程 60 61 62 Observer.$on("up",(msg)=> 63 //订阅者监听函数 64 console.log(msg) 65 ) 66 Observer.$on("up",(msg)=> 67 //订阅者监听函数 68 console.log(msg) 69 ) 70 71 Observer.$delete("up") 72 73 Observer.$on("down",(msg)=> 74 //订阅者监听函数 75 console.log(msg) 76 ) 77 78 79 80 Observer.$emit("up",123)//发布者 做函数的触发 81 82 83 Observer.$emit("down",456)//发布者 84 85 86 //这样功能就可以实现了然后抛出使用了
所谓的发布订阅在react中不受限制生命周期限制,比如上一边博客说的在componentDidMount这个生命周期中明明只执行一遍但是里面因为订阅者存在
所以他不受生命周期的影响只会被发布者控制
以上是关于前端设计模式之观察者模式的主要内容,如果未能解决你的问题,请参考以下文章