상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
다이어트 중 운동의 빈도는 어떻게 설정해야 하나요?
다이어트 중 체중 감량을 위한 운동 루틴은 어떻게 구성하나요?
외장하드디스크의 소음 문제는 어떻게 해결하나요?
로봇의 감각 기관은 어떻게 작동하나요?
로봇의 생체 모방 기술은 무엇인가요?
로봇의 제어 이론은 무엇인가요?
로봇의 행동 계획 기술은 어떻게 발전하고 있나요?
스마트 시티의 시민 피드백 시스템은 어떻게 작동하나요?
홍소육의 조리 과정은 어떻게 되나요?
보더 콜리의 행동을 교정하기 위한 방법은 무엇인가요?
스테로이드와 면역 시스템의 관계는 무엇인가요?
스테로이드 사용이 신체 이미지에 미치는 영향은 어떤가요?
Previous
Next
수정하기 - switchMap을 사용하여 폼 입력을 어떻게 처리하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap은 주로 RxJS에서 사용하는 연산자로, 특히 Angular나 React와 같은 프레임워크에서 비동기 스트림을 처리할 때 폼 입력값을 기반으로 API 호출이나 기타 비동기 작업을 처리할 때 유용합니다. switchMap을 이용하면 이전에 발생한 비동기 작업이 완료되지 않았더라도 새로운 입력값이 들어오면 바로 이전 작업을 취소하고 최신 입력값에 대한 작업만 실행하게 됩니다. 폼 입력을 switchMap으로 처리하는 기본적인 방법을 단계별로 자세히 설명드리겠습니다. 1. 폼 입력 스트림 준비하기 보통 Angular에서는 `FormControl`이나 `FormGroup`의 `valueChanges` Observable을 사용하여 폼 입력값 변경을 감지합니다. 예를 들어, ```typescript this.myFormControl.valueChanges ``` 이렇게 하면 사용자가 입력할 때마다 입력값이 스트림으로 방출됩니다. 2. 필요에 따라 연산자 적용하기 (선택사항) 입력값이 너무 자주 발생해서 방어하기 위해 `debounceTime`(입력 후 일정 시간 동안 대기), `distinctUntilChanged`(이전 값과 동일하면 무시) 같은 연산자를 함께 사용하면 좋습니다. ```typescript this.myFormControl.valueChanges.pipe( debounceTime(300), distinctUntilChanged(), ) ``` 3. switchMap으로 비동기 작업 연결하기 switchMap은 내부에서 새로운 Observable(주로 API 요청 등 비동기 작업)을 반환합니다. 입력이 변경될때 마다 이전의 처리가 취소되고 최신 입력값만 처리하므로, 최신 입력에 대응하는 데이터만 받게 됩니다. ```typescript this.myFormControl.valueChanges.pipe( debounceTime(300), distinctUntilChanged(), switchMap(value => this.apiService.search(value)) // 검색 API 호출 예시 ).subscribe(results => { this.searchResults = results; }); ``` 4. switchMap의 동작 <a href='https://sangseek.com/sangseeks/모식/ko'>모식</a>도 - 사용자가 "a"를 입력 → 검색 API 호출 시작 - 사용자가 바로 "ab"를 입력 → 이전 "a" 검색 호출 취소 → "ab" 검색 호출 시작 - 이전 API 호출 결과가 늦게 와도 무시되고, 항상 최신 "ab" 결과만 처리됨 5. 장점 - 빠른 입력 변화에 대해 이전 불필요한 요청을 취소하여 네트워크 낭비를 줄임 - 응답 순서가 뒤바뀌어도 실제 최신 입력값에 해당하는 응답만 처리 - 비동기 작업 제어가 쉽고 코드도 간결함 6. 예제 (Angular Reactive Form) ```typescript import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators'; import { ApiService } from './api.service'; @Component({ selector: 'app-search', template: ` <input [formControl]="searchControl" placeholder="Search..."> <ul> <li *ngFor="let item of results">{{ item.name }}</li> </ul> ` }) export class SearchComponent implements OnInit { searchControl = new FormControl(); results: any[] = []; constructor(private apiService: ApiService) {} ngOnInit() { this.searchControl.valueChanges.pipe( debounceTime(300), distinctUntilChanged(), switchMap(value => this.apiService.search(value)) ).subscribe(data => { this.results = data; }); } } ``` 7. 정리 - `valueChanges`로 입력 이벤트 스트림을 받고 - `debounceTime`으로 타이밍 조절, `distinctUntilChanged`로 중복 방지 후 - `switchMap`으로 매 입력값마다 새로운 비동기 작업을 수행하고 - 이전 작업은 취소하여 최신 상태만 반영하게 하는 패턴입니다. 요약하면, switchMap은 폼 입력 이벤트를 받아 최신 입력값을 기반으로 비동기 작업(API 호출 등)을 처리할 때 적합한 연산자이며, 입력값이 빠르게 바뀌더라도 항상 가장 최신 값에 대한 응답만 처리하게 해줍니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기