컴포넌트가 랜더링 되면 DOM Tree에 붙는 순간이 있을 것입니다. 그 붙는 순간에 특정작업을 할 수 있게 하는 것이 componentDidMount입니다. componentDidMount는 처음 랜더가 성공적으로 실행되었을 때 실행됩니다. 그 후 setState같은 것으로 rerendering이 일어날때는 componentDidMount는 실행되지 않습니다
구체적으로 언제 componentDidMount가 유용하게 사용되는가? setSTate를 render함수 내에서 쓰면 무한히 리랜더링이 일어나기 때문제 setState를 render함수 내부에서는 쓸수 없다는 것을 배운적이 있다. 즉 상태는 바꾸고 싶지만 render함수 내부에는 쓸 수 없을때 바뀌는 행위를 componentDidMount안에 작성하는 것입니다.
반대로 컴포넌트가 제거되는 시점에 특정작업을 할 수 있게 하는 것이 componentWillUnmount입니다. 주로 componentDidMount에서 취했던 행위를 제거하는 내용을 componentWillUnmount안에다 넣어줍니다.
마지막으로 componentDidUpdate가 있습니다. 첫번째 랜더링이 일어났을때 실행되는것이 componentDidMount였다면 그 후에 setState로 상태가 변하거나 props의 상태가 변하면 render함수가 재실행되는데 그것처럼 리랜더링 시점에 실행되는 것이 componentDidUpdate입니다.
이렇게 해서 componentDidMount, componentDidUpdate, componentWillUnmount를 컴포넌트의 라이프사이클이라고 합니다.
이 3가지를 적용해 보면 아래와 같다.
1. 클래스 컴포넌트의 경우: constructor(여기서 생성자라고 하면 별거없이 state정의 부분과 함수 정의 부분이 실행되는 것을 말함. 여기서 실행된다는 것은 클래스 컴포넌트에 state와 내가 정의한 함수에 붙는 다는 말. Dom트리에 컴포넌트가 붙으므로) => render함수실행 => ref함수 실행 =>componentDidMount => (setState실행/props바뀔때)render함수 실행 (=> shouldComponentUpdate존재한다면 실행됨) => componentDidUpdate => 부모가 나를 없앴을 때 => ComponentWillUnmount =>소멸
==================================================================================
훅스의 경우 componentDidMount, componentDidUpdate, componentWillUnmount가 존재하지 않습니다. 즉, 훅스에는 엄밀히 라이프 사이클이 존재하지 않지만 존재하는것처럼 흉내를 낼수 있습니다.
어떻게 흉내를 내나? useEffect라는 훅을 사용해서!
useEffect를 이렇게 정의만 해놓고 따로 호출하는 것은 아님!!! 정의만 하면 그 역할을 함!
복습! 함수형 컴포넌트에서 아래에서 내가 정의한 setResult, setImgCorrd...와 같은 함수로 state를 변화시키면 컴포넌트 전체가 리랜더링됨(함수도 재정의 된다는 말)
각 상태마다 다양한 효과를 내기 위해 useEffect를 아래와 같이 여러번 사용할 수도 있습니다.
마지막으로 남기고 싶은 내용은 훅에서 라이플사이클이라고 하면 useEffect를 생각하면 된다는 것이다.
'FrontEnd > React' 카테고리의 다른 글
React Hooks -useRef에 대하여 (2) | 2024.03.26 |
---|---|
React Hooks -useState에 대하여 (0) | 2024.03.26 |
React Hooks - useMemo(컴포넌트의 성능 최적화를 위해 사용되는 hook! useMemo와 useCallback) (0) | 2024.03.25 |
Code splitting(코드 스플리팅)에 대하여 (1) | 2024.03.23 |
Webpack의 historyApiFallback에 대하여 (0) | 2024.03.23 |