inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

웹 게임을 만들며 배우는 React

5-5. Hooks와 useEffect

useEffect 부분 질문 있습니다.

252

인혁

작성한 질문수 3

0

useEffect(() => { // componentDidMount, componentDidUpdate 역할

interval.current = setInterval(changeHand, 100); ----> 1번 코드

return () => { // componentWillUnmount 역할

clearInterval(interval.current); ----> 2번 코드

}

}, [imgCoord]);

위 코드에서 조금 찝찝한 부분이 있어서 질문(Q1, Q2, Q3) 드립니다.

  1. 처음 RSP 함수 컴포넌트 코드가 실행되고 컴포넌트가 생성되면, 1번 코드가 실행됨

  2. 0.1초 후 changeHand 함수가 실행돼서 state가 바뀜

  3. state 의 변화로 RSP 함수 컴포넌트 코드가 재실행되기 전에 2번 코드가 실행된 후 기존 RSP 컴포넌트가 소멸됨

  4. 함수 컴포넌트 코드가 재실행되면서 컴포넌트가 생성되면, 1번 코드가 다시 실행됨 === (1번 과정)

  5. (2번 과정으로 다시 반복)

Q1. 그러면 componentDidMount 랑 componentWillUnmount 인 상황만 반복될 뿐, class 컴포넌트 라이프사이클에서의 componentDidUpdate 와 동일한 역할을 하는 상황은 Hooks에서는 만들어지지 않는 건가요?

Q2. 강의 설명에 '두 번째 인수 배열에 넣은 값(예제에서는 imgCoord)들이 바뀔 때 useEffect가 실행됨' 이라고 나와있는데, 처음 컴포넌트가 생성되었을 때 useEffect의 componentDidMount가 실행되는 것을 보면 두 번째 인수 배열에 넣은 값들이 바뀌지 않아도 useEffect는 반드시 실행되어야 하는 것 아닌가요?

또한 class 컴포넌트에서는 비동기 함수 외부에서 선언한 변수를 함수 내부에서 사용할 때 함수 내부의 변수의 참조값이 변하지 않는 문제가 생겼었는데, 함수 내부에 변수를 선언해 줌으로써 해결했던 걸로 기억합니다.

Q3. 여기서도 마찬가지로 useEffect의 두 번째 인수 배열은 외부에서 선언한 변수를 useEffect 함수 내부로 가져와서 참조관계를 그때그때 바꾸기 위한 용도로 사용된 것 아닌가요?

react

답변 1

0

제로초(조현영)

  1. 무슨 말씀인지 잘 모르겠습니다. 저 코드는 componentDidUpdate 역할을 주로 합니다. return 부분도 componentDidUpdate가 실행되기 전에 매번 실행됩니다. componentDidMount와 componentWillUnmount 부분 역할은 처음과 끝에서 한번만 일어날 뿐이고 useEffect 대부분 componentDidUpdate 역할을 하는 겁니다.

  2. useEffect는 무조건 한 번은 실행됩니다. 그 부분이 componentDidMount 부분이겠고요.

  3. 네 맞습니다. imgCoord가 바뀌는 순간의 changeHand 함수를 setTimeout에 넣기 위함입니다.

npm run dev 실행 시 포트가 안뜨는 문제

0

239

2

timeouts.current를 useEffect 의 input값으로 넣었을때

0

98

2

렌더링 테스트 코드 (Hooks)

0

93

1

Cannot find package 'react-refesh' 이런 에러 뜨시는 분들 보세요.

0

166

1

해당 에러 뜨는 분들 보세요. "Uncaught TypeError: ReactDom.createRoot is not a function"

1

208

1

강사님 레포지토리에서 코드 복사 시 master 브랜치 말고 react18 브랜치꺼 복붙하세요ㅠㅠ

0

108

1

useMemo와 useCallback 사용 시기

0

221

2

onRightClickTd가 작동을 하지 않습니다.

0

237

1

action.type 불러오는 방식

0

226

2

onClickRedo 질문

0

177

1

const Try = require(./Try) 빨간줄

0

261

1

npx webpack 실행시

0

324

1

지뢰찾기 강좌에서 빈칸들 한번에 열기 파트에서 여쭤보고싶은부분이 있어서 글 올립니다.

0

243

1

강좌에서 다루지 않은 기능들은 어떻게 학습하면 좋을까요?

0

319

1

react devtool이 enable 않됩니다.

0

548

2

React 랜더링이 되지 않습니다.

0

422

2

비동기로 동작하는 setState에 대해서

0

340

1

npm run dev 할 때 에러발생

0

496

2

memo, PureComponenet, shouldComponentUpdate 관련 질문

0

211

1

devMiddleware의 필요성

0

358

1

리액트에서 화살표 함수를 사용해야하는 이유

0

948

2

path.join관련질문

0

287

2

2-9. 웹팩 데브 서버와 핫 리로딩 설치과정 시 에러

0

384

1

next.js 에서 이와 비슷한 예제를 돌리고있는데 react랑 달라서 질문 드립니

1

503

4