Angular 의 RxJS 분석
RxJS RxJS 은 어떤 특징 이 있 습 니까?RxJS 핵심 개념RxJS 가 뭐야?
javaScript 에서 우 리 는 리 셋 함수, Promise, Gender, async 함수 와 같은 비동기 프로 그래 밍 방식 을 자주 접 할 수 있 습 니 다. 이상 의 방식 은 각각 특징 이 있 지만 우 리 는 더욱 강력 한 특성 과 우아 한 쓰기 가 필요 합 니 다. 따라서 RxJS 는 우리 의 더 좋 은 선택 입 니 다.
Rx.JS 은 영문 Reactive Extensions for JavaScript 의 줄 임 말 입 니 다. 중국어 로 번역 하면 자바 스 크 립 트 의 응답 식 확장 입 니 다. 그 주요 기능 은 응답 식 프로 그래 밍 모델 을 이용 하여 자바 스 크 립 트 의 비동기 프로 그래 밍 을 실현 하 는 것 입 니 다.RxJS 는 어떤 특징 이 있 습 니까?
공식 문서 에 따 르 면:
먼저 간단 한 예 를 들 어 이벤트 모니터 (이벤트 에이전트) 를 등록 합 니 다.
var button = document.querySelector('button');
button.addEventListener('click', () => console.log('Clicked!'));
우 리 는 RxJS 로 이 기능 을 실현 합 니 다 (Rxjs 를 도입 해 야 합 니 다).
var button = document.querySelector('button');
Rx.Observable.fromEvent(button, 'click')
.subscribe(() => console.log('Clicked!'));
상기 코드 는 여러분 이 알 아 볼 수 있 을 것 입 니 다. 대충 설명 하 세 요.
Rx.Observable.fromEvent() 은 관찰 가능 한 대상 Observable, 즉 감청 가능 한 대리 대상 을 만 든 것 과 같 습 니 다. subscribe 는 이 대상 의 한 방법 입 니 다. 이 방법 은 이 감청 사건 을 되 돌려 줍 니 다. subscribe 방법의 매개 변 수 는 관찰 대상 의 반환 값 에 대해 다음 작업 (리 셋 함수) 을 하 는 것 입 니 다.다음은 RxJS 의 특징 을 소개 합 니 다.
청정 성
먼저 부정적인 예 를 본다.
var count = 0;
var button = document.querySelector('button');
button.addEventListener('click', () => console.log(`Clicked ${++count} times`));
count 는 전역 변수 로 서 전역 환경 을 오염 시 키 고 응용 상 태 를 엉망 으로 만 들 었 습 니 다.
다음은 긍정 적 인 예 이다.
var button = document.querySelector('button');
Rx.Observable.fromEvent(button, 'click')
.scan(count => count + 1, 0)
.subscribe(count => console.log(`Clicked ${count} times`));
scan 연산 자의 작업 원 리 는 배열 의 reduce 과 유사 하 다.매번 리 셋 함수 가 실 행 된 후의 리 턴 값 은 다음 리 셋 함수 가 실 행 될 때의 매개 변수 가 됩 니 다.유동성 (Flow)
부정적인 예:
var count = 0;
var rate = 1000;
var lastClick = Date.now() - rate;
var button = document.querySelector('button');
button.addEventListener('click', () => {
if (Date.now() - lastClick >= rate) {
console.log(`Clicked ${++count} times`);
lastClick = Date.now();
}
}); //
정면 교재:
var button = document.querySelector('button');
Rx.Observable.fromEvent(button, 'click')
.throttleTime(1000)
.scan(count => count + 1, 0)
.subscribe(count => console.log(`Clicked ${count} times`));
이제 RxJS 가 되 게 시원 하 게 쓰 는 것 같 아 요.
RxJS 핵심 개념
Observable (관찰 대상): 하나의 개념 을 나타 내 는데 이 개념 은 호출 가능 한 미래 값 이나 사건 의 집합 이다.Observer (관찰자): 반전 함수 의 집합 으로 Observable 이 제공 하 는 값 을 어떻게 감청 하 는 지 알 고 있 습 니 다.Subscription (구독): Observable 의 실행 을 표시 하고 주로 Observable 의 실행 을 취소 하 는 데 사 용 됩 니 다.Operators (연산 자): 함수 식 프로 그래 밍 스타일 의 순 함수 (pure function) 를 사용 하여 map, filter, concat, flatMap 등 과 같은 조작 자 를 사용 하여 집합 을 처리 합 니 다.Subject (주체): EventEmitter 에 해당 하 며 값 이나 이벤트 다 중 길 을 여러 Observer 에 전달 하 는 유일한 방법 입 니 다.Schedulers (스케줄 러): 병발 을 제어 하고 중앙 집권 스케줄 러 로 계산 이 발생 할 때 조정 할 수 있 습 니 다. 예 를 들 어 setTimeout 이나 requestAnimationFrame 또는 기타.Observable (관찰 대상)
Observables 는 여러 값 의 타성 푸 시 집합 입 니 다.
Observable 은 RxJS 의 핵심 개념 중 하나 이다. 그것 은 실제로 외부 에서 관찰 할 수 있 는 대상 이다. 자신의 상태 가 변화 할 때 그 변 화 를 외부 에 보 내 그 대상 을 관찰 하 게 한다.즉, 관찰자 대상 이다. 또한 Observables 은 여러 값 의 타성 푸 시 집합 이기 때문에 하나의 관찰자 대상 을 사용 하여 구독 한 후에 야 동기 화 되 거나 비동기 적 으로 0 으로 되 돌아 갈 수 있다. 다음은 RxJS 을 사용 하여 Observable 을 만 드 는 방식 이다.var observable = Rx.Observable.create(function subscribe(observer) {
var id = setInterval(() => {
observer.next('hi')
}, 1000);
});
위의 인 스 턴 스 는 관찰자 에 게 1 초 간격 으로 문자열 'hi' 를 보 내 는 Observable 을 만 들 었 습 니 다.
Observer (관찰자)
관찰자 란 무엇 인가? -관찰 자 는 Observable 이 보 낸 값 의 소비자 다.관찰 자 는 리 셋 함수 의 집합 일 뿐, 리 셋 함수 마다 Observable 에서 보 내 는 알림 유형: next, error, complete 에 대응 합 니 다.
쉽게 말 하면,Observer 는 Observable 에서 값 을 보 내 는 방법 으로 집합 합 니 다. Observable 에서 값 을 보 낸 후 Observable 에서 어떻게 사용 할 지 결정 합 니 다. 사용 하 는 방식 은 반전 함 수 를 통 해 Observable 에서 보 낸 값 을 매개 변수 로 전달 합 니 다. 나중에 내부 에서 사용 하도록 합 니 다. 또한 Observable 에서 보 낸 값 에 따라 호출 된 반전 함수 도 같 습 니 다.다 릅 니 다. 각각 next (다음 단계), error (오류 보고), complete (끝) 가 있 습 니 다. 다음은 Observer 를 사용 하 는 방법 입 니 다.
observable.subscribe(observer);
관찰 자 를 사용 하려 면 Observable subscribe 방법 을 제공 해 야 합 니 다.
구독 (구독)
Subscription 이 뭐 예요?
Subscription 은 자원 을 정리 할 수 있 음 을 나타 내 는 대상 으로 보통 Observable 의 집행 이다.Subscription 은 unsubscribe 라 는 중요 한 방법 이 있 습 니 다. 인 자 는 필요 하지 않 고 Subscription 이 사용 하 는 자원 을 청소 하 는 데 만 사 용 됩 니 다.이전 버 전의 RxJS 에 서 는 Subscription 을 'Disposable' (청소 가능 대상) 이 라 고 합 니 다. Subscription (구독) 은 observable. subscribe () 를 사용 하여 관찰자 대상 을 만 들 때 되 돌아 오 는 대상 입 니 다. 주로 unsubscribe () 함 수 를 사용 하여 Observer 가 Observable 에 대한 감청 구독 을 자발적으로 닫 습 니 다. 그 사용 방법 은 다음 과 같 습 니 다.var observable = Rx.Observable.interval(1000);
var subscription = observable.subscribe(x => console.log(x));
// :
// Observable
// Observable subscribe
subscription.unsubscribe();
연산 자 (연산 자)
조작 부 호 는
Observable 유형의 방법 으로 예 를 들 어 .map(...)、.filter(...)、.merge(...), 등 이다.조작 부호 가 호출 되 었 을 때, 그것들 은 이미 존재 하 는 Observable 실례 를 바 꾸 지 않 을 것 이다.반면 이들 은 새로운 Observable 으로 돌아 가 subscription 논 리 는 첫 번 째 Observable 을 바탕 으로 한다.조작 부 호 는 함수 입 니 다. 현재
Observable 을 기반 으로 새로운 Observable 을 만 듭 니 다.이것 은 부작용 이 없 는 조작 이다. 앞의 Observable 은 변 하지 않 는 다.본질 적 으로
Operators 은 순수한 함수 입 니 다. Observable 을 입력 으로 받 아들 일 수 있 습 니 다. 그리고 내부 의 일련의 처 리 를 거 친 후에 새로운 Observable 을 출력 으로 되 돌려 줍 니 다. 다음 작업 으로 이동 합 니 다.제목 (주체)
Subject 가 뭐야? -RxJS Subject 는 특수 한 유형의 Observable 로 여러 관찰자 에 게 값 을 더 할 수 있 기 때문에 Subject 는 다 중 방송 이 고 일반적인
Observables 은 단독 방송 이다 (구독 한 관찰자 마다 Observable 의 독립 적 인 집행 을 가진다). `Subject` `Observalbe`, 。`Subject` ` EventEmitters`, 。
모든 Subject 는
Observable 과 Observer 입 니 다. Subject 에 대해 서 는 subscribe 방법 을 사용 하여 관찰 자 를 지정 할 수 있 습 니 다. next(v)、error(e) 과 complete() 을 사용 하여 도 로 를 받 아들 이 는 값 을 처리 할 수도 있 습 니 다. 예 를 들 어 다음 과 같 습 니 다.var subject = new Rx.Subject();
subject.subscribe({
next: (v) => console.log('observerA: ' + v)
});
subject.subscribe({
next: (v) => console.log('observerB: ' + v)
});
subject.next(1);
subject.next(2);
위의 예제 에서 우 리 는 Subject 에 두 명의 관찰 자 를 추가 한 다음 에 Subject 에 값 을 제공 합 니 다.
스케줄 러 (스케줄 러)
스케줄 러 가 뭐야? -스케줄 러 는 subscription 을 언제 시작 하고 알림 을 언제 보 내 는 지 제어 합 니 다.그것 은 세 부분 으로 구성 되 어 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.