반응형
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")
);
반응형
'Coding > React' 카테고리의 다른 글
state와 ref의 차이점 (0) | 2023.02.15 |
---|---|
React v18에선 이제 안써요!!"ReactDOM.render is no longer supported in React 18" (2) | 2022.06.10 |
댓글