๐ข RXjs?
์๋ฐ์คํฌ๋ฆฝ์์ ๋ฆฌ์กํธ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ "๋๊ธฐ"๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์(map,array,... ๋ฑ๋ฑ) ๊ณผ "๋น๋๊ธฐ"๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์(Ajax , ์ฌ์ฉ์ ์ด๋ฒคํธ ๋ฑ..) ๊ฐ๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ฉฐ ์์์ ํ๋ฆ์ ์ฐพ๊ธฐ๊ฐ ํ๋ค๋ค.
๊ทธ๋ฆฌํ์ฌ ๋๊ธฐ,๋น๋๊ธฐ๋ฅผ ํ๋์ ๋ฐ์ดํฐ ํ๋ฆ์ผ๋ก ์ฒ๋ฆฌํ๋๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๐คฉ Rxjs ์๋์๋ฆฌ
Rxjs์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๋ Observable ๊ณผ Obserable๋ฅผ ๊ตฌ๋ ํ๋ Observer๊ฐ ์กด์ฌํฉ๋๋ค.
Observable ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ๋ฉด, Observable๋ฅผ ๊ตฌ๋ ํ๋Observer๋ ๋ฐ์ดํฐ ๋ณํ์๋ฐ๋ผ ๋ฐ์ํ๋ค๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๐ข Angular ์์ Rxjs ์ฌ์ฉํด๋ณด๊ธฐ
์ด๋ฒ์๋ ์ฝ๋๋ฅผ ํตํด Obserable๊ณผ Observer๋ฅผ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
// RxJS ์ํฌํธ
import { Observable } from 'rxjs';
@Component({
selector: 'app-rxjs',
templateUrl: './rxjs.component.html',
styleUrls: ['./rxjs.component.css']
})
export class RxjsComponent implements OnInit {
constructor(private http: HttpClient) {
}
ngOnInit() {
this.makeObserable();
}
makeObserable() {
//1.์ต์ ๋ฒ๋ธ์ด ๊ตฌ๋
๋ ๋ ํธ์ถ ๋๋ ํจ์
const subscriber = (observer: any) => {
try {
//next ํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ฐฉ์ถ
observer.next(1);
observer.next(2);
//complete ํจ์๋ฅผ ํธ์ถ
observer.complete();
} catch (error) {
observer.error(error);
}
finally {
// ๊ตฌ๋
ํด์ง๋ ๋ ํธ์ถ๋๋ ์ฝ๋ฐฑ ํจ์
return () => console.log('Unsubscribed!')
}
}
//2.์ต์ ธ๋ฒ๋ธ ์์ฑ
const observer$ = new Observable(subscriber);
//3.๊ตฌ๋
(subscription)
observer$.subscribe(
// ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ next ๋
ธํฐํผ์ผ์ด์
์ ๋ฐ์ํ๋ next ๋ฉ์๋
value => console.log(value),
// ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ error ๋
ธํฐํผ์ผ์ด์
์ ๋ฐ์ํ๋ error ๋ฉ์๋
error => console.error(error),
// ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ complete ๋
ธํฐํผ์ผ์ด์
์ ๋ฐ์ํ๋ complete ๋ฉ์๋
() => console.log('Complete')
)
}
}
1.๊ตฌ๋ ํจ์(subscriber)๋ฅผ ๋ง๋ค๊ณ , ๊ตฌ๋ ํจ์๋ฅผ Obserable๋ฅผ ์์ฑํฉ๋๋ค.
const subscriber = (observer: any) => {
try {
//next ํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ฐฉ์ถ
observer.next(1);
observer.next(2);
//complete ํจ์๋ฅผ ํธ์ถ
observer.complete();
} catch (error) {
observer.error(error);
}
finally {
// ๊ตฌ๋
ํด์ง๋ ๋ ํธ์ถ๋๋ ์ฝ๋ฐฑ ํจ์
return () => console.log('Unsubscribed!')
}
}
//2.์ต์ ธ๋ฒ๋ธ ์์ฑ
const observer$ = new Observable(subscriber);
๊ทธ๋ฆฌํ์ฌ ์๋ ๊ฐ์ ๊ทธ๋ฆผ์ด ์์ฑ๋ฉ๋๋ค.
2. ๋ค์์ผ๋ก Obserable๋ฅผ ๊ตฌ๋ ํ๋ ๋ถ๋ถ์ ๋ณด๊ฒ ์ต๋๋ค.
//3.๊ตฌ๋
(subscription)
observer$.subscribe(
// ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ next ๋
ธํฐํผ์ผ์ด์
์ ๋ฐ์ํ๋ next ๋ฉ์๋
value => console.log(value),
// ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ error ๋
ธํฐํผ์ผ์ด์
์ ๋ฐ์ํ๋ error ๋ฉ์๋
error => console.error(error),
// ์ต์ ๋ฒ๋ธ์ด ๋ฐฉ์ถํ complete ๋
ธํฐํผ์ผ์ด์
์ ๋ฐ์ํ๋ complete ๋ฉ์๋
() => console.log('Complete')
)
subscribe๋ฅผ ํธ์ถํ๊ธฐ ์ ๊น์ง๋ ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌํ์ฌ ๊ผญ subscribe๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์.
subscribe๋ฅผ ํธ์ถํ๋ฉด ์ธ์ ์๋ ๊ทธ๋ฆผ์ด ์์ฑ๋ฉ๋๋ค.
์์ ๊ฐ์ด ์ธ์ subscribe๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํ ๊ฒฝ์ฐ Observer(next, error, complete)๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ฐ์งํ ์ ์์ต๋๋ค.
๐งค ๋ค์์๋..?
Rxjs๋ฅผ ๋ง์ฐ์ค ์ด๋ฒคํธ๋ฅผ ํตํด ์ฌ์ฉํด๋ณด๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
'Angular' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ Angular ng-content (0) | 2022.10.26 |
---|---|
๐ngrx๋ฅผ ์ด์ฉํ์ฌ ์๋ฌ๋ ํ์ผ์ฒ๋ฆฌ (0) | 2022.07.30 |
Ngrx ๋์ (0) | 2022.06.16 |
๐ฅทAngular์ ๋ค๊ตญ์ด ๊ด๋ฆฌ (0) | 2021.11.07 |
๋๊ธ