#2 Subject를 이벤트 버스로 사용(Event Buses)

1477 단어
지난편에서 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 (
      
this.subject.next(ev)}> // observer { `${this.state.count}} Hello ${this.props.name}` }
) } } ReactDOM.render(, rootDom);

좋은 웹페이지 즐겨찾기