리액트에서는 라이프사이클 메서드를 통해 컴포넌트의 생성, 업데이트, 제거 등의 과정을 관리합니다. 이를 통해 특정 시점에 필요한 동작을 수행할 수 있습니다. 2021년부터 리액트는 함수형 컴포넌트와 Hooks를 더 많이 사용하게 되면서, 라이프사이클 메서드들은 클래스 컴포넌트에서만 사용할 수 있게 되었습니다. 그러나 이에 대한 이해는 중요하므로 기본적인 라이프사이클 메서드에 대해 설명하겠습니다.
리액트의 라이프사이클은 크게 세 단계로 나눌 수 있습니다.
Mounting(마운팅): 컴포넌트가 DOM에 삽입되는 단계입니다. 이 단계에는 constructor
, render
, componentDidMount
가 있습니다.
constructor
: 컴포넌트의 생성자 메서드로, 컴포넌트가 생성될 때 한 번만 호출됩니다. 이 메서드에서는 초기 state를 정의할 수 있습니다.render
: UI를 만드는 메서드로, JSX를 반환합니다. 이 메서드 안에서는 이벤트 설정이 아닌 곳에서 setState를 호출하면 안 되며, 브라우저의 DOM에 접근해서도 안 됩니다.componentDidMount
: 컴포넌트가 화면에 모두 그려진 후 호출되는 메서드로, 비동기 요청, 이벤트 등록, DOM에 관련된 작업을 처리하는 데 적합합니다.Updating(업데이트): props 또는 state가 변경되어 컴포넌트가 업데이트되는 단계입니다. render
와 componentDidUpdate
메서드가 있습니다.
render
: 위와 같습니다.componentDidUpdate
: 컴포넌트가 업데이트 된 후에 호출되는 메서드로, 이전 props나 state를 이용해 특정 조건에 따라 다른 동작을 처리할 수 있습니다.Unmounting(언마운팅): 컴포넌트가 DOM에서 제거되는 단계입니다. componentWillUnmount
메서드가 있습니다.
componentWillUnmount
: 컴포넌트가 화면에서 사라지기 전에 호출되는 메서드로, 이벤트 해제 등 필요한 정리 작업을 수행하는 데 사용합니다.리액트 16.3 이후로 라이프사이클에 변화가 있었으며 componentWillMount
, componentWillReceiveProps
, componentWillUpdate
가 deprecated(사용이 권장되지 않는) 되었습니다. 대신 새로운 라이프사이클 메서드인 getDerivedStateFromProps
, getSnapshotBeforeUpdate
가 도입되었습니다.
그러나 대부분의 경우, 라이프사이클 메서드보다는 리액트 Hooks(useState
, useEffect
, useContext
등)를 사용해 더 간결하고 이해하기 쉬운 코드를 작성하는 것이 일반적입니다. 2021년 이후로 클래스 컴포넌트보다 함수형 컴포넌트와 Hooks 사용이 권장되고 있습니다.