오늘은 리액트 컴포넌트의 생명주기에 대해서 공부해보도록 하겠습니다.
먼저 마운트될 때 발생하는 생명주기에 대해서 알아보겠습니다.
constructor
constructor(props)
constructor
는 컴포넌트의 생성자 메서드입니다. 생성자는 해당 컴포넌트가 마운트되기 전에 호출됩니다.
React에서 생성자는 보통 두 가지 목적을 위하여 사용됩니다.
getDerivedStateFromProps
static getDerivedStateFromProps(props, state)
getDerivedStateFromProps()
는 최초 마운트 시와 갱신 시 모두에서 render 메서드를 호출하기 직전에 호출됩니다. state를 갱신하기 위한 객체를 반환하거나, null을 반환하여 아무 것도 갱신하지 않을 수 있습니다.
render
render()
render()
메서드가 호출되면 this.props
와 this.state
의 값을 활용하여 아래의 것 중 하나를 반환해야 합니다.
render() 함수는 순수해야 합니다. 즉, 컴포넌트의 state를 변경하지 않고, 호출될 때마다 동일한 결과를 반환해야 하며, 브라우저와 직접적으로 상호작용을 하지 않습니다.
componentDidMount
componentDidMount()
componentDidMount()
는 컴포넌트의 첫번째 렌더링이 마치고 나면 호출되는 메서드입니다. 이 메서드가 호출되는 시점에서는 우리가 만든 컴포넌트가 화면에 나타난 상태입니다.
주로 axios, fetch 등을 통하여 ajax 요청을 하거나 DOM의 속성을 읽거나 직접 변경하는 작업을 진행합니다.
그 다음으로는 컴포넌트가 업데이트 되는 시점에 호출되는 메서드에 대해 알아보겠습니다. 위에 중복되는 내용은 생략하겠습니다.
shouldComponentUpdate
shouldComponentUpdate(nextProps, nextState)
shouldComponentUpdate()
는 props 또는 state가 새로운 값으로 갱신되어서 렌더링이 발생하기 직전에 호출됩니다. 기본값은 true입니다.
주로 성능 최적화를 하기 위해 사용됩니다.
getSnapshotBeforeUpdate
getSnapshotBeforeUpdate(prevProps, prevState)
getSnapshotBeforeUpdate()
는 가장 마지막으로 렌더링된 결과가 DOM등에 반영되기 전에 호출됩니다.
이 생명주기 메서드가 반환하는 값은 componentDidUpdate()
에 인자로 전달됩니다.
componentDidUpdate
componentDidUpdate(prevProps, prevState, snapshot)
componentDidUpdate()
는 갱신이 일어난 직후에 호출됩니다. 이 메서드는 최초 렌더링시에는 호출되지 않습니다.
컴포넌트가 갱신되었을 때 DOM을 조작하기 위하여 이 메서드를 활용하면 좋습니다.
componentWillUnmount()
componentWillUnmount
componentWillUnmount()
는 컴포넌트가 마운트 해제되어 제거되기 직전에 호출됩니다. 이제 컴포넌트는 다시 렌더링되지 않으므로 절대로 다시 마운트되지 않습니다.
끝까지 읽어주셔서 감사합니다. 😁