상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 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순위입니다.
수정하기
취소하기