해당 강의에서부터 클래스 컴포넌트와 함수컴포넌트(hooks)가 조금씩 달라진다.
Hooks에는 componentDidMount / componentDidUpdate / componentWillUnmount 이런 메서드가 존재하지 않는다.
1:1로 대응되진 않지만 useEffect로 비슷한 역할을 하게 할 순 있다.
useEffect
useEffect(()=>{
//componentDidMount + componentDidUpdate 합쳐놓은 역할
return ()=>{ //componentWillUnmount역할
}
},[]);
내 코드는 강의 코드와 달라서 설명할 수 없지만 강의에서 외워두라고 한것!
- useEffect의 두 번째 파라미터는 어떤 값이 바뀔 때마다 useEffect를 실행하고 싶은지 설정하고 싶을 때 사용한다. 위의 예시처럼 빈 배열 [] 을 넣는다면 최초 렌더링 시 딱 한번 실행한다는 의미.
- 강의 코드
useEffect(()=>{
console.log('다시 실행');
interval.current = setInterval(()=>{setImageCoord(0);},100);
return ()=>{
console.log('종료');
clearInterval(interval.current);
}
},[imgCoord]);
imgCoord가 바뀔 때마다 해당 useEffect가 실행된다.
그래서 해당 코드는 interval실행하고 return 부분에 있는 코드에 의해 clearInterval을 반복하기 때문에 setTimeout과 동일한 기능을 한다.
함수 컴포넌트의 특성 상 state/props가 바뀌면 함수 내부의 코드가 전체 재실행 된다. (클래스형 컴포넌트는 render함수만 재실행)
useEffect에 대해서 외워야할 것 정리
■ 라이프사이클
◎ 해당 컴포넌트가 마운트될 때 실행되는 함수
◎ 해당 컴포넌트가 언마운트될 때 실행
useEffect(()=>{
return ()=>{
//clean up 함수 --> 컴포넌트가 언마운트될 때 실행
}
},[])
※ 언마운트 될 때는?(JSX라고 가정) showComponent가 false가 될 때 언마운트 되고, true가 될 때 마운트 된다.
{
showComponent && <Todo/>
}
◎ 리렌더시 마다 실행 (보통 실수일 가능성이 높다.)
useEffect(()=>{
})
◎ todo가 바뀔 때마다 실행 (clean up과의 순서가 매우 중요함)
useEffect(()=>{
//todo가 바뀔 때 마다 실행됨.
return ()=>{
//todo가 바뀌기 직전에 실행됨.
}
},[todo])
※ 순서가 중요하다 (clean up은 바뀌기 전의 값이라고 생각하자!)
todo가 a->b로 바뀐다고 가정하면
1. a의 useEffect 실행 (최초 1회만 실행되는거 같다.)
2. a의 clean up 실행
3. b의 useEffect 실행
그 다음에 b -> c로 바뀐다면?
1. b의 clean up 실행
2. c의 useEffect실행
만약에 a,b,c가 바뀔 때마다 실행되고 싶은데 각각 실행되는 코드가 다르다면? useEffect를 여러개 만들면 된다.
그리고 dependency 배열에 각각 넣어주면됨.
'코딩이야기 > 인터넷 강의' 카테고리의 다른 글
section4. 5-7 커스텀 훅으로 우아하게 interval하기 (0) | 2024.06.02 |
---|---|
section4. 5-6 클래스와 Hooks 라이프사이클 비교 (1) | 2024.05.31 |
section4. 5-2 setInterval과 라이프사이클 연동하기 (0) | 2024.05.29 |
section4. 5-1 리액트 라이프사이클 소개 (0) | 2024.05.28 |
section4. 4-3 성능 체크와 Q&A, 4-4. 반응속도체크 Hooks 전환 (0) | 2024.05.28 |