이번에 작성한 글은 저의 생각과 GPT를 활용하여 궁금한 부분을 확인한 내용이므로 신뢰성이 비교적 낮을 수 있습니다. 만약 잘못된 지식이 존재한다면 댓글 부탁드립니다.
문득 useEffect 의존성 배열에 아래의 2가지 값을 담을 경우 어떻게 출력되는지 궁금해졌습니다.
따라서 총 테스트 할 부분은 전역변수 3가지(문자열, 배열, 객체)와 지역변수(문자열, 배열, 객체)입니다.
테스트 해볼 코드
결과는 아래와 같이 나옵니다.
변경이 발생한 부분만 수정합니다.
1번과 3번의 질문인 외부에 선언한 경우 원시값이든, 참조값이든 외부 저장소에 해당값이 저장되어 있기 때문에 App 컴포넌트가 매번 새롭게 만들어지더라도, 변하지 않는 고정된 값을 가리키기 때문에 이전값과 달라지지 않아 useEffect가 실행되지 않고, 따라서 호출되지 않습니다.
내부에 선언된 원시값은 App 함수가 리렌더링될 때마다 새로 생성됩니다. 그러나 useEffect의 의존성 배열에 포함된 원시값은 Object.is 비교를 통해 이전 값과 동일한지 확인하고, 동일하다면 useEffect는 실행되지 않습니다. 따라서 호출되지 않습니다.
useEffect의 의존성 배열에 내부에 선언된 참조값을 추가할 경우, 이전값과 Object.is로 비교할때 이전값과 현재값은 동등하지만, 참조값이 달라지기 때문에 같다고 판단되지 않아 useEffect가 실행되고, 따라서 호출이 됩니다.