我的代码结构如下,当我尝试加载 useBlocker 时,它会抛出以下错误
Error: useBlocker must be used within a data router
。因此,为了解决这个问题,我们必须用 createBrowserRouter 替换 BrowserRouter。如何替换为以下结构。
index.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
import { Provider as ReduxProvider } from "react-redux";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<ReduxProvider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</ReduxProvider>
</React.StrictMode>
);
import {Routes, Route} from "react-router-dom";
import About from "./component/About";
import Team from "./component/Team";
import Home from "./component/Home";
function App() {
return (
<>
<Navbar />
<Routes >
<Route path="/" element={ <Home /> } />
<Route path="/team" element={ <Team /> } />
<Route path="/about" element={ <About /> } />
</Routes>
</>
);
}
export default App;
在这种情况下我们如何添加
createBrowserRouter
,我想将我的路线放在我的 App.tsx 中
在
App
文件中声明路由器。
index.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
import { Provider as ReduxProvider } from "react-redux";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<ReduxProvider store={store}>
<App />
</ReduxProvider>
</React.StrictMode>
);
应用程序.tsx
import {
createBrowserRouter,
createRoutesFromElements,
RouterProvider,
Routes,
Route,
Outlet,
} from "react-router-dom";
import About from "./component/About";
import Team from "./component/Team";
import Home from "./component/Home";
const AppLayout = () => (
<>
<Navbar />
<Outlet />
</>
);
const router = createBrowserRouter(
createRoutesFromElements(
<Route element={<AppLayout />}>
<Route path="/" element={<Home />} />
<Route path="/team" element={<Team />} />
<Route path="/about" element={<About />} />
</Route>
)
);
function App() {
return <RouterProvider router={router} />;
}
export default App;