기본적으로 리액트의 컴포넌트는 생성되고, 업데이트되며, 제거되는 일련의 생명주기를 가지게 된다. 그리고 리액트는 다음과 같은 주요 생명주기 메서드를 가진다.
처음 컴포넌트가 생성되는 것을 의미한다.
새로운 prop 을 받거나, state 가 변경 등의 이유로 컴포넌트의 내용이 변경되는 것을 의미한다.
컴포넌트가 화면에서 제거되는 것을 의미한다.
위와 같은 리액트의 라이프 사이클 메서드는 클래스 컴포넌트에서 사용이 가능하고, 함수형 컴포넌트에서는 useEffect 를 사용하여 비슷하게 이를 구현한다.
useEffect(() => {
node.addEventListener('click', EventHandler); // call-back func
return (
node.removeEventListener('click', EventHandler); // clean-up func
)
}, [state1, state2, ...]) // dependency array
componentDidMount 와 동일한 기능을 한다.
예시에서는 렌더링이 끝난 뒤 node.addEventListener('click', EventHandler) 가 수행된다.
부모요소가 재렌더링 되는 경우, 컴포넌트의 state 가 변경되는 경우 Updating 이 이루어지는데, 기본적으로는 componentDidUpdate 와 동일한 기능을 하지만 dependency array 에 따라 다르게 동작한다.
dependency array 가 주어지지 않은 경우 : 매 update 마다 실행되며, 예시에서는 렌더링 이후에 node.removeEventListener('click', EventHandler) 를 수행한 뒤 node.addEventListener('click', EventHandler) 가 수행된다.
dependency array 가 주어진 경우 : update가 되어도 dependency array 의 요소가 하나라도 변경된 경우에만 실행되며, 빈 배열로 dependency array 가 주어지면 update 시에 아예 실행되지 않는다.
componentWillUnmount 와 동일한 기능을 한다.
예시에서는 컴포넌트가 사라지면서 node.removeEventListener('click', EventHandler) 를 수행한다.