• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    해결됨

useEffect []

21.04.22 16:54 작성 조회수 129

0

리액트에서 setState될때 리렌더링이 일어나는데

클래스는 아래 render() 부분이 다시실행되는반면

Hooks는 전체가 다시실행되버리기때문에

useEffect에 [ ] 배열이 비어있을경우 setInterval이 딱한번만 실행되고 리렌더링되버려서 그림이 더안바뀌고.

[ ] 에 useEffect로 값이변경되는 state를 넣으면 그걸 감지해서 setInterval이 다시실행되고 .반복한다.

제가 이해한 useEffect 작동원리가 이런데.. 맞는건가요? 

답변 1

답변을 작성해보세요.

2

빈 배열인 경우에도 setInterval은 실행되므로 changeHand는 계속 실행됩니다. 다만 그림이 안 바뀌는 이유는 changeHand 내부의 imgCoord가 안 바뀌기 때문입니다.

그래서 imgCoord를 바꾸기 위해서 [imgCoord]를 넣은 것입니다.

hun.K님의 프로필

hun.K

2022.02.10

이 부분 관련해서 궁금한 점이 있습니다. useEffect 두 번째 인자로 빈 배열을 둘 경우 setInterval의 changeHand 함수는 계속 실행되는데 useEffect가 이 함수 내부에 setImgCoord의 실행을 막는 것인가요?

아뇨 setImgCoord는 실행되는데 changeHand가 처음 선언된 함수 그대로 가는겁니다. changeHand 내부의 imageCoord도 첫 상태 그대로 가는거고요.