클래스형 컴포넌트에는
componentDidMout와 같은 생명주기 메서드들이 있습니다. 이와 같이 함수형 컴포넌트에서의 생명주기관련 훅은useEffect입니다.
의존성 배열 [] 에 아무것도 넣지 않으면 Mount시에만 렌더해주고 끝나게 됩니다.(1번만 실행)
useEffect(()=>{
console.log("마운트 됨!!")
},[])
의존성 배열이 없으면 아무거나 하나라도 바뀌게 되면 무조건 다시 실행됩니다
의존성 배열안에 특정 값을 넣으면 그 값이 바뀔때만 다시 실행됩니다
// 의존성 배열 없을 때
useEffect(()=>{
console.log("수정하고 다시 그려짐!!")
})
// someState가 수정될때만 리렌더 해주기
useEffect(()=>{
console.log("수정하고 다시 그려짐!!")
},[someState])
return의 값은 첫 mount시 실행되지 않고, 다른 페이지 이동하기 전 마지막에 실행 됨
useEffect(()=>{
console.log("수정하고 다시 그려짐!!")
//
return(()=>{
console.log("여기서 나갈래요!!")
})
}, [])
useEffect(() => {
console.log("변경되고 나서 실행")
})
console.log("누가 먼저 실행될까")
위와 같은 경우는 아래쪽에 있는 console.log가 먼저 실행이 된 후 useEffect가 실행이 됩니다.
따라서 setState를 useEffect안에 넣는 경우 렌더링 > useEffect > setState(다시 렌더링) > useEffect 이 되서 추가렌더링 1회가 더 일어나거나 무한 렌더링이 걸릴수 있기 때문에 최대한 지양해주는게 좋습니다.