react
[React] 'useBlocker must be used within a data router' 오류 해결 / useBlocker 관련 오류 해결
pobii
2024. 11. 26. 10:34
useBlock 기능을 사용하려 했지만 알 수 없는 오류로 인해 애를 먹었다.
오류사진
오류의 원인은 버전 호환이 되지 않았기 때문이었다.
useBlock은 react-router 버전6 이전과 이후의 사용코드가 다르다. 따라서 자신이 사용하는 버전에 맞게 사용하도록 하자.
현재 나와있는 블로그에는 react-router v6.4 이전의 코드가 대부분이라 오류가 났다.
(본인이 사용한 react-router 버전은 7.0.1이다.)
버전이 6.4 이후로는 useBlocker가 Data Router 환경에서만 작동하도록 변경되었다.
따라서 라우팅을 설정할 때 기존방식인 BrowserRouter 대신 creacteBrowserRouter와 RouterProvider를 사용해야한다.
기존에 사용했던 방식
import {
BrowserRouter as Router,
Routes,
Route,
} from "react-router-dom";
import Home from './pages/Home';
function App() {
return (
<div className="App">
<Router>
<Routes>
<Route path="/" element={<Home />} />
</Routes>
</Router>
</div>
);
}
export default App;
- BrowserRouter를 사용하여 라우팅 설정
수정한 코드
import React from "react";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import Home from './pages/Home';
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
},
]);
function App() {
return (
<div className="App">
<RouterProvider router={router} />
</div>
);
}
export default App;
- BrowserRouter 대신 createBrowserRouter와 RouterProvider를 사용하여 라우팅 설정
공식 문서: https://reactrouter.com/6.28.0/hooks/use-blocker