프론트엔드/React

React Lifecycle - class & hook 2부

.log('FE') 2021. 12. 17. 16:42
728x90
반응형

이전글 : 2021.12.16 - [프론트엔드/React] - React Lifecycle - class & hook 1부

 

React Lifecycle - class & hook 1부

리액트의 생명주기에 대해서 정리하려고합니다. 자주 사용하는것만 당연하게 사용하고있다보니 자세히 설명하려고 하면 항상 공식문서나 다른 자료들을 참고하게되어서 이참에 그냥 블로그에

code-reading.tistory.com

 

class - update

리액트의 클래스 컴포넌트의 업데이트를 처리하는 호출 순서는 아래와 같습니다.

  • static getDerivedStateFromProps()
  • shouldComponentUpdate()
  • render()
  • getSnapshotBeforeUpdate()
  • componentDidUpdate()

static getDerivedStateFromProps() 에 대해서는 1부에서 다루었던 내용이라 여기선 건너뛰겠습니다. 

컴포넌트에서 업데이트가 발생하는경우는 state 또는 props 에 대해서 변경사항이 발생했을 때 입니다. 상태의 변경이 발생하면 리렌더링을 통해서 변경사항을 화면에 보여주어야 합니다. 

 

shouldComponentUpdate() - 덜 중요함

해당 메소드는 stateprops 가 갱신되어 렌더링이 발생하기 직전에 호출됩니다. 기본값은 true 이고 false 일경우 상태의 갱신에 상관없이 렌더링을 발생시키지 않을 수 있습니다. 초기 렌더링시에는 발생하지않고 상태의 변경이 있을때에만 호출됩니다.

해당 메소드는 오직 성능 최적화 만을 위한것으로 성능최적화 목적이 아닌 렌더링방지 목적으로만 사용한다면 버그로 이어질 수 있습니다.

 

예를 들자면 우리가 컴포넌트를 조합하고 만들다보면 의도하지않게 렌더링이 여러번 발생하는 경우가 있습니다. 이때 의도하지않았고 불필요한 렌더링을 줄여 성능이슈를 해결할때 사용할 수 있습니다.

shouldComponentUpdate(nextProps, nextState)

 

다만 얕은 비교를 통해 렌더링여부를 체크하는것이 필요하다면 PureComponent 를 사용하기를 권장하고 있습니다.

왠만하면 사용을 지양하는 메소드이며 로직을 이해하는데 있어서 방해 요소가 될 가능성이높고 예상치못한 렌더링 이슈로 이어질 수 있습니다. 

 

getSnapshotBeforeUpdate() - 덜 중요함

class 컴포넌트를 사용하면서도 한번도 사용해 본적 없었던 메소드인것같습니다. 

해당 메소드에 대한 설명은 공식문서를 참고해주세요

 

 

componentDidUpdate(prevProps, prevState)

갱신이 일어난 직후에 호출됩니다. 여기서 말하는 갱신이란 state 또는 props 에 변경사항이 발생했을때 입니다. 최초 렌더링시에는 호출되지않고 보통 상태가 업데이트 된 후 업데이트된 DOM 을 조작하기위해 활용하거나 props 를 비교하여 네트워크 요청을 보내기도합니다.

만약 해당 메소드 내에서 setState 를 사용하려 한다면 조건문을 통해서 사용해야합니다. 그냥 사용할경우 무한루프를 생성할 수 있습니다.

 

부모로부터 내려받은 props 를 state 에 그대로 저장하여 사용하는것은 지양하고 직접 props 를 사용하기를 권장합니다.

이유는 props 의 이전값이 다른지 동일한지 여부와 상관없이 상위 구성요소가 렌더링될때마다 호출되기때문에 불필요한 렌더링이 발생할 수 있고 내부 state 의 상태 업데이트가 손실될 수 있습니다.

 


 

hook - update

 

728x90
반응형

'프론트엔드 > React' 카테고리의 다른 글

forwardRef 알아보기  (0) 2022.03.11
React Lifecycle - class & hook 1부  (0) 2021.12.16
React 동작 이해하기  (0) 2021.10.18