챌린지에 대한 자세한 내용은 가이드를 참고하세요.

데스크톱과 모바일 환경에 따라 컴포넌트의 스타일이 아닌 컴포넌트를 다르게 사용해야겠다고 생각했다. 그래서 CSS 미디어쿼리가 아닌 자바스크립트의 matchMedia 메서드를 사용했다.(사실 CSS 미디어쿼리를 써도 된다. 컴포넌트에 클래스를 심어놓고 환경에 맞는 것만 보여주도록 하면 되기 때문이다.)
CSS 미디어쿼리와 matchMedia 메서드의 차이 두 가지를 적어본다.
디바운싱은 과도한 API 요청을 막기 위해 사용한 것이다. 이때 입력 폼의 값을 업데이트 하는데, 디바운싱이 같이 적용되어서는 안된다. 입력 폼의 값은 바로바로 업데이트하고, 디바운싱 코드를 따로 뚜어 API 요청을 하도록 해야한다.
// onChage 이벤트 발생
// 입력 폼의 값은 바로바로 업데이트
setName(e.target.value);
// 이후 디바운싱을 통해 API 폼 데이터 업데이트
if (timerRef.current) {
clearTimeout(timerRef.current);
}
timerRef.current = window.setTimeout(() => {
onChangeFormData({
name: e.target.value,
});
}, 500);
보통 특정 요소가 노출되는 시점을 잡아 작업을 하기 위해 Intersection Observer를 쓴다. 무한 스크롤은 스크롤이 끝에 도달했을 경우 데이터를 요청하여 다음 페이지를 렌더링하기 때문에 IO를 쓰려면 다음 페이지가 있는 경우 IO의 대상이 될 요소를 마지막에 넣어주는 것이 좋다.