리액트의 Main job
side effect/Effect
란?Main job과 관련된 것 이외의 모든 것
→ http 요청, 로컬스토리지에 데이터 저장하기, interval, timers etc..
이 side effect 들은 화면에 무언가를 그리는 것과 직접적인 연관은 없다.
단순히 http 요청하고 에러핸들링 하는것은 UI 렌더링과 긴밀히 연관되어 있지는 않다.
리액트로 external system(리액트가 control 하지 않는 외부 시스템)에 접근할 때 사용한다.
ex) browser DOM API, 외부 라이브러리나 API 사용할때
http 요청의 경우
리액트 컴포넌트는 기본적으로 데이터(state)가 업데이트되면 자동으로 리렌더링 되는데 http 요청하고 응답으로 받은 값을 state에 저장하는 함수가 있다고 가정할때 이 함수를 컴포넌트 내에 직접 호출하게 되면 무한루프에 빠지게 된다.(state 업데이트 후 리렌더링되면 또 함수 호출하고 http 요청 날리고.. http 요청을 무한으로 계속 날리게 됨)
이를 해결하는 방법으로 useEffect 훅을 사용할 수 있다.
리액트 개발 모드일때 왜 콘솔이 두번 찍힐까?