react-native-calenders 라이브러리를 사용 중 자꾸 wran에러가 발생하였다. 물론 저장하면 사라지기도 하고, 구현하는데에는 큰 문제가 없지만 거슬리기도 하고 나중에 문제가 발생할 수도 있으니 고치는게 좋을 것 같아서 여러 서치 끝에 에러를 해결하였다.
해결법은 아래 링크에서 찾을 수 있었다.
https://stackoverflow.com/questions/55664673/require-cycles-are-allowed-but-can-result-in-uninitialized-values-consider-ref
이 부분인데, gpt도 모듈 간의 순환 의존성(circular dependency)이 발생할 때 나타난다고 한다.
쉽게 말하면 위에있는 표에서 B나 C모듈에서 시작을 하는데(나의 경우에는 캘린더) 상호작용하는 다른 모듈(예를 들어 B)에서 뭔가를 가져오지 않았기 때문에(A가) 제대로 동작하지 않는다는 것이다. 하지만 정상 작동하는 이유는 가져오지 못했던 모듈(모듈B)들이 가져와지고 평가될 때 사용하고자하는 모듈(A모듈)이 다시 평가되고 작동되기 때문이라고 한다. 이걸 이해를 못해서 1시간을 넘게 서치했다...
해결법은 gpt도 위 링크와 똑같이 알려준다
Lazy Loading 또는 Dynamic Import: 코드를 나누어서 로딩하는 기술을 사용하여 순환 의존성을 방지할 수 있습니다. React Native에서는 import() 함수를 사용하여 동적으로 모듈을 로드할 수 있습니다. 이를 통해 모듈 간의 의존성을 최소화할 수 있습니다.
라고 합니다.
쉽게 말하면
import {Calendar, CalendarList, Agenda} from 'react-native-calendars';
위와같은 import 코드를
import Calendar from 'react-native-calendars/src/calendar';
import CalendarList from 'react-native-calendars/src/calendar-list/new';
import Agenda from 'react-native-calendars/src/agenda';
이렇게 바꾸게 되면 서로 의존되고 있는 모듈들을 각각 불러옴으로써 의존성을 방지할 수 있다는 것이다.
gpt는 위와같은 방법 말고도 3가지 방법을 더 추천해줬는데 이미 패키지 버전은 최신 버전이어서 당장 급하게 고칠 수 있는 방법은 이 방법 뿐이었다..
결론! 따로따로 임포트하자