해결된 질문
작성
·
1K
7
답변 1
6
안녕하세요, 권예준님. 소플입니다.
해당 문제는 리액트 버전18에서 Strict Mode의 동작이 변경되었기 때문인 것으로 확인되었습니다.
Strict Mode는 개발 모드일 때 잠재적인 버그를 찾을 수 있게 해주는 모드라고 생각하시면 됩니다.
https://reactjs.org/docs/
그리고 리액트 버전18에서 변경된 Strict Mode의 동작과 관련해서는 아래 링크를 참고하시면 좋을 것 같습니다.
https://reactjs.org/blog/2022/
위 링크에 나와있는 설명에서 핵심은 "React would unmount and remount trees using the same component state as before." 라는 부분입니다.
즉, 개발 모드에서 Strict Mode를 사용하게 되면, 컴포넌트를 unmount 시켰다가 다시 한 번 remount 시키게 된다는 것입니다.
때문에 저희가 사용했던 componentDidMount() 함수가 두 번 호출이 됩니다.
프로덕션 배포를 하게되면 Strict Mode는 무시되기 때문에 정상적으로 작동할텐데,
Strict Mode가 아닌 상태로 테스트를 해보시려면 아래와 같이 하시면 됩니다.
index.js 파일에 보시면 아래와 같이 React.StrictMode로 감싸진 부분을 볼 수가 있는데,
해당 부분을 삭제하고 실행해보시면 메시지가 하나씩 추가되는 것을 보실 수 있습니다.
엄격하게 하자면 Strict Mode인 상태에서도 정상적으로 메시지가 1개씩 출력되도록,
아래와 같이 componentWillUnmount() 함수까지 구현을 해야합니다.
다만, 강의는 리액트 버전 17을 기준으로 제작되었고,
Strict Mode까지 다루게 되면 너무 내용이 어려워지기 때문에 예제 코드를 저렇게 작성한 부분에 대해서는 양해 부탁드립니다.
리액트 버전 18을 기준으로 한 코드는 향후에 제공할 수 있도록 하겠습니다.
감사합니다.
무료 강의인데도 친절하고 자세한 답변 정말 감사드립니다!