rxjs 관측 가능성과 일반 반응 구성요소를 통합하려면 어떻게 해야 하는가?
나는 Rxjs를 처음 접하고 외부 포장지/도서관 없이 간단한 리액션 구성 요소와 통합하는 방법을 배우려고 한다.여기서 할 수 있어
const counter = new Subject()
class App extends Component {
state = {
number: 0
}
componentDidMount() {
counter.subscribe(
val => {
this.setState({ number: this.state.number + val })
}
)
}
increment = () => {
counter.next(+1)
}
decrement = () => {
counter.next(-1)
}
render() {
return (
<div style={styles}>
Current number {this.state.number}
<br /> <br />
<button onClick={this.increment}>Plus</button>
<button onClick={this.decrement}>Minus</button>
</div>
)
}
https://codesandbox.io/s/02j7qm2xw
문제가 되는 것은 벤 레쉬와 같은 전문가들에 따르면 이것이 알려진 안티패턴인 피사체를 사용한다는 것이다: https://medium.com/@benlesh/on-the-the-on-the-in-rxjs-2b08b7198b93
난 이렇게 하려고 했다:
var counter = Observable.create(function (observer) {
// Yield a single value and complete
observer.next(0);
// Any cleanup logic might go here
return function () {
console.log('disposed');
}
});
class App extends Component {
state = {
number: 0
}
componentDidMount() {
counter.subscribe(
val => {
this.setState({ number: this.state.number + val })
}
)
}
increment = () => {
counter.next(+1)
}
decrement = () => {
counter.next(-1)
}
// - render
}
그러나 이 오류는 다음과 같은 오류로 인해 실패한다.counter.next is not a function
그래서 나는 어떻게 사용할 것인가?new Observable()
또는Observable.create()
그리고 그것을 에 사용하다.setState
일반 반응 구성 요소와 함께 사용하시겠습니까?
왜냐하면.next()
이다Observer
의 방법, NOT Observables
.
이유Subject
단지 때문에 효과가 있다.Subject
그 자체는 둘 다이다.observer
그리고observable
. 전화할 때subject.next()
, 당신은 단지 업데이트하고 있을 뿐이다.observable
헤어지고, 모든 사람에게 통지하다observers
그 변화에 대해서.
에 관한 한 때때로 꽤 혼란스러울 수 있다.Observable
그리고Observers
. 간단히 말해 다음과 같은 방법을 생각해 보십시오.Observable
데이터를 생산하는 사람, 즉 데이터 생산자; 한편Observer
데이터를 소비하는 사람, 즉 데이터 소비자.간단히 비유하자면 소비자는 생산되는 것을 먹는다.동일한 토큰에 대해 관찰자(소비자)는 관찰 가능한(생산된)을 관찰한다.
컨텍스트(또는 최소한 반응/감소 패러다임)에서Subject
더 잘하다그것은 때문이다.Subject
위엄이 있다데이터 생산에 대한 가치 추적(작업)Observable
관찰 가능(주제 내부의 것)이 변경되거나 업데이트될 때마다observers
에 가입되어 있는Subject
통보가 있을 겁니다여기 환원제와 비슷한 패턴이 보이시죠?Redex 스토어가 업데이트될 때마다 뷰에 알림이 표시되고 그에 따라 업데이트됨.실제로 반응형 프로그래밍에 매우 익숙하다면, 환원형 스토어의 사용을 완전히 없애고, 다음으로 완전히 교체할 수 있다.Subject
s 및/또는BehaviourSubject
s
벤 레쉬의 직책에 대해 그는 단지 이렇게 말하고 있을 뿐이다.항상 사용Observable
가능하다면 오직 사용하시오.Subject
정말 필요할 때 말이야그 특정 게시물에서, 그는 클릭 이벤트가 단지 하나의 이벤트일 수 있다고 말하고 있다.Observable
; 사용Subject
부적절할 겁니다그러나 리액션/리축스와 같은 컨텍스트에서는Subject
괜찮다. 왜냐하면Subject
클릭 이벤트 핸들러가 아닌 스토어의 상태를 추적하기 위해 사용된다.
TLDR:
- 사용하다
Subject
수완의 추적하고 . .next()
이다Observer
의 방법이 아닌Observable
.
'Programing' 카테고리의 다른 글
Nuxt의 Vuex-module-decorator 구문으로 정의된 Vuex 모듈을 vue-test-utils 및 Jest를 사용하여 테스트하는 방법 (0) | 2022.03.17 |
---|---|
라우터에서 매개 변수를 사용하는 동안 오류 발생.푸시 함수 vue-property 4 (0) | 2022.03.17 |
Vue 앱(Vuetify.js 포함)에서 검증이 포함된 간단한 양식을 구현하는 방법 (0) | 2022.03.17 |
Python - 'ascII' 코덱에서 바이트를 디코딩할 수 없음 (0) | 2022.03.17 |
Python 3에서 Raw_input을 사용하는 방법 (0) | 2022.03.17 |