React 공식문서 읽기
https://ko.reactjs.org/docs/lifting-state-up.html
함수 내의 어떤 구현이 함수 외부에 영향을 끼치는 경우 해당 함수는 Side Effect가 있다고 한다.
let foo = 'hello';
function bar() {
foo = 'world';
}
bar(); // bar는 Side Effect를 발생시킨다
function upper(str) {
return str.toUpperCase(); // toUpperCase 메소드는 Immutable
}
upper('hello') // 'HELLO'
React에서 컴포넌트를 렌더링할 때, 서버에서 값을 받아오는 경우(➡️ Side Effect),
컴포넌트의 라이프사이클 내에서 서버와 통신하게 되면 화면이 잠시 멈추는 등의 증상이 나타날 수 있다.
따라서 서버에서 값을 받아오는 작업은 라이프사이클에 영향을 주지 않는 방법으로 처리해야 한다.
컴포넌트 라이프사이클과 무관한 외부에서 비동기로 서버와 통신하고 컴포넌트 상태를 업데이트하는 Side Effect 개념이 필요한 것이다. 이 때 useEffect()가 가장 이상적인 해결방법이 된다.
useEffect는 React가 제공하는, Side Effect를 다루기 위한 Hook이다.
useEffect(함수)
➡️ 기본 형태
useEffect의 첫번째 인자는 함수이다. 해당 함수 내에서 side effect를 실행하면 된다. 이 함수는
실행된다. 즉, 매번 컴포넌트가 새롭게 렌더링될 때마다 실행된다.
useEffect(함수, [종속성1, 종속성2])
useEffect의 두번째 인자는 종속성 배열이다. 이 배열 내의 종속성1 또는 종속성 2의 값이 변할 때만 첫번째 인자의 함수가 실행된다.
useEffect(함수, [])
이 때에는 컴포넌트가 처음 생성될 때만 함수가 실행된다.(한번만 실행)
❗️ 아무것도 넣지 않은 기본 형태인 경우 useEffect(함수)
앞서 적은 것처럼 컴포넌트가 렌더링될 때마다 함수가 실행된다.