클래스형 컴포넌트의 componentDidMount 와 componentDidUpdate 를 합친 형태로 보아도 무방한 것이 바로 useEffect가 되는 것. 리액트 컴포넌트가 렌더링 될 때마다 특정 작업을 수행하도록 설정 할 수 있는 Hook이다.
React는 컴포넌트 단위로 화면에 렌더링을 한다. 이 때 각각의 컴포넌트는 LifeCycle을 갖는다.
생성 [Mount] 이 될수도 있고 (페이지에 장착하기),
재렌더링 [Update] 이 될수도 있고 (가끔 업데이트하기),
삭제 [Unmount] 가 될 수도 있다. (필요없으니 제거해버리기)
컴포넌트 인생 중간중간 간섭이 가능해진다.-> 중간중간 코드 실행이 가능하다는뜻
실행할 갈고리 달듯 걸기 => hook
mount, update 시 코드를 실행해주는 hook의 이름 : useEffect이다.
useEffect 안에 적은 코드는 html 렌더링 이후에 동작하기 때문임
function Detail(){
(반복문 10억번 돌리는 코드)
return (생략)
}
▲ 여기에 대충 적으면 반복문 돌리고 나서 하단의 html 보여줌
function Detail(){
useEffect(()=>{
(반복문 10억번 돌리는 코드)
});
return (생략)
}
▲ useEffect 안에 적으면 html 보여주고 나서 반복문 돌림
실행 시점이 약간 다르다.
=> 조금이라도 html 렌더링이 빠른 사이트를 원한다면 넣으면 된다.
시간이 오래걸리는 어려운 연산, 서버에서 데이터를 가져오는 작업, 타이머 장착 하는 경우 등
Side Effect : 함수의 핵심기능과 상관없는 부가기능을 가리키는 말 거기서 따왔다.
useEffect( () => { 실행할코드 }, [count])
ex) [ ] 안에 count가 있기에 count라는 변수가 변할 때만 useEffect 안 코드를 실행한다는 뜻
useEffect()의 두번째 파라미터로 [] 를 넣어 거기에 변수나 state 같은 것들을 넣을 수 있음 , 여러개도 가능
[ ]에 있는 변수나 state가 변할 때만 useEffect 안 코드를 실행해줌
암 것도 안넣으면 mount (로드)시 1회만 실행하고 끝
코딩애플 강의 참고
https://velog.io/@edie_ko/React-Component%EC%9D%98-Lifecycle
https://velopert.com/3631