4. 더블 클릭 방지
더블 클릭 방지
문제 상황 ❗️
더블 클릭 방지 = 이미 요청된 상황에서 재요청을 방지하겠다는 것
만약
debounce
로 구현하면, 인터넷 속도가 느린 환경에서는 특정 시간이 넘으면 사용자가 몇 번이고 더 호출할 수 있는 이슈가 생김
Debouce( )
는? 🤔
- 처음 요청과 마지막 요청 중 한 번만 호출
- 이벤트가 끝난 후 호출
- ex ) input 입력, 브라우저 리사이즈 등에 적합
cf) throttle( )
은? 🤔
- 이벤트가 발생하면 일정 주기로 계속 호출
- 이벤트 중간 중간 호출
- ex ) 무한 스크롤 등에 적합
그렇다면 재요청 방지(or 더블 클릭) 에 적합한 방법은? 🤔
일반적인 방법 : loading 상태를 사용
apollo Hooks
의useMutation()
는 배열을 리턴하는데, 첫 번째 원소는 mutation을 호출해야하는 순간에 호출해야하는 함수, 두 번째 원소는 error, loading(로딩 여부)이 들어있는 객체이다.1
2
3const [verifyCertNum, {loading, error}] = useVerifyCertNumMutation({
client: ApolloUser,
});쿼리가 실행 중이라 보여줄 데이터가 아직 없을 때
loading
값이true
loading
은 유저가 mutation 실행 중에 입력 필드나 버튼을 사용할 수 없도록 disabled 할 때 사용할 수 있음1
<input disabled={loading} />
error
는 mutation 실행이 실패했을 때 입력 필드 주변에 오류 정보를 보여주기 위해 사용버튼을 눌렀을 때 data를 받아오기 전
loading
상태가true
일 경우에는return
시켜서 여러번 서버를 호출하는 것을 막는다