개발자

State 변경 전 effect 실행하기

2022년 11월 21일조회 203

Functional component에서, 어떤 state가 변경되기 전에 effect를 실행할 수 있는 hook이 있는지 궁금합니다. useEffect / useLayoutEffect 등은 state가 변경된 뒤에 실행됩니다. Class component의 componentWillUpdate같은 라이프 사이클을 functional component에서 사용할 수 있는 방법이 있을까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

성원님의 프로필 사진

React Hook Flow (https://velog.io/@shmoon2917/React-hook%EC%9D%98-lifecycle)기준으로 state의 변경 -> 컴포넌트 리렌더 -> useEffect Update 순서이기 때문에 단순한 방법으로는 어려울 것 같아요 state의 변경 전에 effect안의 코드를 실행하는게 목적이라면 setState와 코드를 같은 함수에 두어 setState의 순서를 마지막에 놓는 방법이 방법이 있을 수 있고 (필요하다면 setState만 setTimeout으로 콜백처리) state의 변경 -> 컴포넌트 리렌더 -> useEffect Update 라이프 사이클을 생각해서 state 변경 이전에 beforeSetState 성격의 임시 state를 두어서 useEffect를 트리거한 뒤 해당 Effect에서 실제 변경 해야하는 state를 set하는 방법이 있을 수 있겠네요.

손정현님의 프로필 사진

useEffect에서 함수를 반환하면 다음번에 useEffect가 돌기전에 돌아갑니다. (clean-up function 이라고 하죠). 다만, 최초 렌더 시에는 돌지 않습니다. 정확히는 렌더 직후 effect 변경 사항이 돌기전에 cleanup 함수가 돌아갑니다. 이후 effect의 변경 사항이 적용되고 브라우저 페인트가 됩니다 componentWillUpdate는 react 17에서 deprecated 되어서 사용을 지양하는 것으로 알고 있습니다.

profile picture

익명

작성자

2022년 11월 22일

오 왜 이 생각을 못했을까요 ㅋㅋㅋ 좋은 팁 감사합니다 :)

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!