#2 Subject 作為事件總線(Event Buses)

上一篇講到Subject既是Observable,又是observer,它擁有2種特質(zhì)所有的方法,所以我們可以將其作為事件總線,手動(dòng)的分發(fā)事件和接收事件

例如

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后發(fā)出事件
  subject.next(10)
}, 2000)

subject.next(1) // 作為observer 發(fā)出事件
subject.next(2)
subject.next(3)

打印結(jié)果

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

比如在react中的應(yīng)用

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 分發(fā)事件
         { `${this.state.count}} Hello ${this.props.name}` }
      </div>
    )
  }
}

ReactDOM.render(<Counter name="james" />, rootDom);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,172評(píng)論 25 708
  • 介紹 RxJS是一個(gè)異步編程的庫(kù),同時(shí)它通過(guò)observable序列來(lái)實(shí)現(xiàn)基于事件的編程。它提供了一個(gè)核心的類型:...
    泓滎閱讀 16,789評(píng)論 0 12
  • 本文章內(nèi)部分圖片資源來(lái)自RayWenderlich.com 本文結(jié)合自己的理解來(lái)總結(jié)介紹一下RxSwift最基本的...
    FKSky閱讀 3,045評(píng)論 4 14
  • 作者寄語(yǔ) 很久之前就想寫一個(gè)專題,專寫Android開(kāi)發(fā)框架,專題的名字叫 XXX 從入門到放棄 ,沉淀了這么久,...
    戴定康閱讀 7,738評(píng)論 13 85
  • 當(dāng)年看到這句話的時(shí)候,我還有點(diǎn)傲嬌的,覺(jué)得很有道理,也很贊同,就像我一直贊同的,人不可有傲氣,不可無(wú)傲骨。別低頭,...
    peily閱讀 628評(píng)論 0 0

友情鏈接更多精彩內(nèi)容