美文网首页
#2 Subject 作为事件总线(Event Buses)

#2 Subject 作为事件总线(Event Buses)

作者: JamesSawyer | 来源:发表于2018-03-09 10:35 被阅读21次

上一篇讲到Subject既是Observable,又是observer,它拥有2种特质所有的方法,所以我们可以将其作为事件总线,手动的分发事件和接收事件

例如

var subject = new Rx.Subject()

var observerA = {
  next: function(x) { console.log('观察者A ' + x);},
  error: function(err) { console.log(err); },
  complete: function() { console.log('A完成'); }
}


subject.subscribe(observerA) // 作为observable 被其它observer订阅

var observerB = {
  next: function(x) { console.log('观察者B ' + x);},
  error: function(err) { console.log(err); },
  complete: function() { console.log('B完成'); }
}

setTimeout(() => {
  subject.subscribe(observerB) // 作为observable 被其它observer订阅
}, 2000)

setTimeout(() => { // 2s后发出事件
  subject.next(10)
}, 2000)

subject.next(1) // 作为observer 发出事件
subject.next(2)
subject.next(3)

打印结果

"观察者A 1"
"观察者A 2"
"观察者A 3"
"观察者A 10"
"观察者B 10"

比如在react中的应用

class Counter extends React.Component {
  state = {
    count: 0
  }
  subject = new Rx.Subject()
  subject.map(et => +1) // 拥有observable所有的方法
      .scan((acc, x) => acc + x)
      .delay(1000)
      .subscribe(v => {
        this.setState({
          count: v
       })
   })

  render() {
    return (
      <div onClick={ev => this.subject.next(ev)}>  // 作为observer 分发事件
         { `${this.state.count}} Hello ${this.props.name}` }
      </div>
    )
  }
}

ReactDOM.render(<Counter name="james" />, rootDom);

相关文章

  • #2 Subject 作为事件总线(Event Buses)

    上一篇讲到Subject既是Observable,又是observer,它拥有2种特质所有的方法,所以我们可以将其...

  • EventBus框架原理流程图

    1. Publisher是发布者, 通过post()方法将消息事件Event发布到事件总线 2. EventBus...

  • CSAPP translation page 6

    总线 在整个系统中运行的是称为总线(buses)的电导管(electrical conduits)集合,它们在组件...

  • EventBus

    EventBus:事件总线 用处:跨模块,跨线程通信 可以替代holder 三(4)要素: Event事件 su...

  • vue组件传值

    vue中的参数传递方式有1、父子组件中通过props,$emit互相传递2、event bus事件总线3、vuex...

  • RxBus基本使用

    用RxJava实现事件总线(Event Bus) 对于RxBus的使用,就和普通的RxJava订阅事件很相似了。先...

  • 手写RxBus

    参考:用RxJava实现事件总线(Event Bus)http://www.jianshu.com/p/ca090...

  • EventBus的原理解析

    前言 EventBus是一种发布-订阅事件总线。它有三大要素:Event:事件、Publisher:发布者,可以在...

  • AxonFramework,EventStore实现

    事件溯源存储库需要一个事件存储(event store)从聚合中存储和加载事件。事件存储提供了一个事件总线的功能,...

  • 事件总线知多少(1)

    源码路径:Github-EventBus事件总线知多少(1)事件总线知多少(2) 1. 引言 事件总线这个概念对你...

网友评论

      本文标题:#2 Subject 作为事件总线(Event Buses)

      本文链接:https://www.haomeiwen.com/subject/zzbxmxtx.html