'Uncaught Error: useLocation() may be used only in the context of a <Router> component.' 에러 해결방법

반응형

MBTI 테스트 같은 테스트를 만들고 있는 과정에서 home 페이지에서 test 페이지로 그리고 test 페이지에서 result 페이지로 이동할 때 매끄러운 Page Transition을 주기 위해서 AnimatePresence를 Router에 사용했는데 그 때 에러가 발생했다.

 

<Before>

App.tsx


  
function App() {
const location = useLocation();
return (
<AnimatePresence exitBeforeEnter>
<BrowserRouter>
<Routes key={location.pathname} location={location}>
<Route path="/" element={<Home />} />
<Route path="/test" element={<Test />} />
<Route path="/result" element={<Result />} />
</Routes>
<Footer />
</BrowserRouter>
</AnimatePresence>
);
}

맨 처음에는 이런 식으로 코드를 짰는데 계속해서 'Uncaught Error: useLocation() may be used only in the context of a <Router> component.' 에러가 발생했다. 그래서 구글링을 통해 StackOverFlow 에서 해결 방법을 찾아낼 수 있었다.

 

답변은 index.tsx 파일에서좀 더 명확하게 App을 BrowserRouter로 감싸라는 해결 방법이었다. 그래서 추후 해결한 코드로는

 

<After>

App.tsx


  
function App() {
const location = useLocation();
return (
<AnimatePresence exitBeforeEnter>
<Routes key={location.pathname} location={location}>
<Route path="/" element={<Home />} />
<Route path="/test" element={<Test />} />
<Route path="/result" element={<Result />} />
</Routes>
<Footer />
</AnimatePresence>
);
}

 

index.tsx


  
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<GlobalStyle />
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById("root")
);

 

반응형

댓글