
그 이유는 바로바로!
Strict Mode때문!
한줄요약
: strict mode가 렌더링 단계 메서드가 여러번 호출될 때side-effect를 자동으로 찾아주는 것은 어려우나 의도적으로 함수를 이중호출하여 문제가 되는 부분을 발견할 수 있게 도와주는 것이다

root에서 redner할때 strictMode로 감싸져있으며 strict mode는 개발모드에서만 활성화 된다.
개발 모드에서만 활성화되기 때문에, 프로덕션 빌드에는 영향을 끼치지 않습니다- 안전하지 않은 생명주기를 사용하는 컴포넌트 발견
- 레거시 문자열 ref 사용에 대한 경고
- 권장되지 않는 findDOMNode 사용에 대한 경고
- 예상치 못한 부작용 검사
- 레거시 context API 검사
- Ensuring reusable state
위의 코드 중 2번씩 랜더링 되는 이유는 예상치 못한 부작용 검사에 해당된다.
constructor
componentWillMount (or UNSAFE_componentWillMount)
componentWillReceiveProps (or UNSAFE_componentWillReceiveProps)
componentWillUpdate (or UNSAFE_componentWillUpdate)
getDerivedStateFromProps
shouldComponentUpdate
render
setState 업데이트 함수 (첫 번째 인자)
의도적으로 이중호출하는 함수(개발모드에서만 적용)
- 클래스 컴포넌트의 constructor, render 그리고 shouldComponentUpdate 메서드
- 클래스 컴포넌트의 getDerivedStateFromProps static 메서드
- 함수 컴포넌트 바디
- State updater 함수 (setState의 첫 번째 인자)
- useState, useMemo 그리고 useReducer에 전달되는 함수
참고 : react문서
오류 방지를 위해 이중호출을 해주는 Strict모드 그동안 왜 두번씩 랜더링 되는거지 ㅇㅂㅇ 라는 생각만 가지고 있다가 이렇게 정리를 하고 나니 개운(편안)해졌다. 이제는 두번씩떠도 당황하지않고 Strict모드야 고맙다~를 외칠수있겠다.