최근 Redux 코드베이스에서 버그를 발견하여 머리가 긁힐 정도였습니다. 테스트 스위트에서 말도 안 되는 오류가 발생했을 때 갑작스러운 혼란의 물결을 느낀 적이 있다면 그 느낌을 아실 것입니다. 발생한 상황과 최종적으로 문제를 발견하고 해결한 방법은 다음과 같습니다.
순환 종속성은 둘 이상의 모듈이 직접 또는 간접적으로 서로 종속되어 종속성 체인에 무한 루프를 생성할 때 발생합니다. 즉, 두 친구가 "네가 먼저 가세요"라고 말했지만 아무도 움직이지 않는 것과 같습니다. JavaScript에서는 이로 인해 정의되지 않은 모듈이나 불완전한 데이터가 발생하여 추적하기 매우 어려운 버그가 발생할 수 있습니다.
두 개의 JavaScript 파일 moduleA.js와 moduleB.js를 상상해 보세요.
// moduleA.js import { functionB } from './moduleB.js'; export function functionA() { console.log('functionA called'); functionB(); } // moduleB.js import { functionA } from './moduleA.js'; export function functionB() { console.log('functionB called'); functionA(); }
여기서 두 모듈은 서로 의존합니다. JavaScript가 이를 로드하려고 하면 다른 하나가 먼저 준비되지 않으면 어느 것도 완전히 로드될 수 없기 때문에 혼란스러워집니다. 이로 인해 정의되지 않은 함수나 불완전한 모듈과 같은 문제가 발생하며 기본적으로 혼란스럽습니다.
아, 이 모험을 시작한 끔찍한 오류:
Error: `reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers. ❯ Module.configureStore node_modules/@reduxjs/toolkit/src/configureStore.ts:98:11
나의 첫 반응은? "잠깐, 뭐?!" — 내 최고의 순간은 아니었어요. 나는 리듀서가 제자리에 있다고 확신했기 때문에 이 오류는 갑자기 발생한 것처럼 보였습니다. 약간의 조사 끝에 나는 이것이 누락된 리듀서 문제가 아니라 내 Redux 설정에 몰래 들어가는 순환 종속성이라는 것을 깨달았습니다. 물론 그것을 알아내는 것은 쉽지 않았습니다!
그때 나는 구세주를 찾았습니다: npm 패키지 dpdm. 이 보석은 종속성 트리를 분석하고 교활한 순환 종속성이 어디에 있는지 보여줍니다. 다음 명령을 실행하면 명확한 보기가 제공됩니다.
dpdm --no-warning --no-tree ./src/index.tsx
그리고 짜잔! 내 프로젝트에서 찾은 내용은 다음과 같습니다.
• Circular Dependencies 01) src/stores/store.ts -> src/stores/rootReducer.ts -> src/stores/slice/authSlice.ts -> src/utilities/api.ts 02) src/stores/rootReducer.ts -> src/stores/slice/bookingSlice.ts -> src/hooks/redux.tsx -> src/stores/types.ts -> src/stores/setUpStore.ts 03) src/stores/types.ts -> src/stores/setUpStore.ts ...
보고서는 명확했습니다. 내 Redux 파일(주로 store.ts, rootReducer.ts 및 일부 슬라이스)에 다수의 순환 종속성이 있었습니다. 일부 로직을 분할하고, 불필요한 종속성을 분해하고, 코드를 리팩토링한 후 마침내 모든 것이 정상으로 돌아왔습니다.
그러니 다음에 이 성가신 벌레를 만나면 커피를 마시고 웃으며 그 고리를 끊으세요!
즐거운 디버깅을 즐겨보세요! ?
위 내용은 dpdm을 사용하여 Redux에서 순환 종속성 버그를 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!