React Nesting Router 在 react-router-dom v6 中不工作
React Nesting Router is not working in react-router-dom v6
我正在使用 ERB(Electron React Boilerplate)并尝试使用 React Router Dom v6.2.1.
所以我将 Router 与 MemoryRouter 一起使用,因为 BrowserRouter 不是构建 windows 桌面应用程序的好方法。
在这里,我面临一个问题。嵌套路由器在 MemoryRouter 中不工作。
如果我在 BrowserRouter 中使用它,就可以了。
这是我的代码,请告诉我如何在 MemoryRouter 中制作嵌套路由器。
import { MemoryRouter as Router, Route, Routes } from 'react-router-dom';
import './App.css';
import AppLayout from './layouts/AppLayout';
import BaseLayout from './layouts/BaseLayout';
import Store from './redux/Store';
export default function App() {
return (
<Provider store={Store}>
<Router>
<BaseLayout>
<Routes>
<Route path="/" element={<AppLayout/>} />
<Route path="/auth" element={<AuthLayout/>}>
<Router path="login" element={<Login />} />
<Router path="signup" element={<Signup />} />
<Router path="forgot" element={<ForgotPassword />} />
</Route>
</Routes>
</BaseLayout>
</Router>
</Provider>
);
}
我得到了这样的警告控制台Location 'login' not found
请帮我解决这个问题。
提前谢谢你。
这是附加代码。
import { Outlet } from "react-router";
const AuthLayout = () => {
return(
<Outlet />
)
}
export default AuthLayout;
import { useEffect } from "react";
import { useNavigate } from "react-router";
const AppLayout = () => {
const access = localStorage.getItem('access')
const username = localStorage.getItem('username')
let navigate = useNavigate()
if (!access || !username){
useEffect(() => {
navigate('/auth/login')
}, [])
} else {
useEffect(() => {
navigate('/home/dashboard')
})
}
return(
<div>
AppLayout
</div>
)
}
export default AppLayout;
对我来说似乎是一个错字。您应该将 Route
与另一个 Route
嵌套,但您似乎在嵌套 Router
(这是您正在导入的 MemoryRouter
)。只需将内部 Router
更改为 Route
即可解决问题。
<Provider store={Store}>
<Router>
<BaseLayout>
<Routes>
<Route path="/" element={<AppLayout/>} />
<Route path="/auth" element={<AuthLayout/>}>
<Route path="login" element={<Login />} />
<Route path="signup" element={<Signup />} />
<Route path="forgot" element={<ForgotPassword />} />
</Route>
</Routes>
</BaseLayout>
</Router>
</Provider>
我正在使用 ERB(Electron React Boilerplate)并尝试使用 React Router Dom v6.2.1.
所以我将 Router 与 MemoryRouter 一起使用,因为 BrowserRouter 不是构建 windows 桌面应用程序的好方法。
在这里,我面临一个问题。嵌套路由器在 MemoryRouter 中不工作。
如果我在 BrowserRouter 中使用它,就可以了。
这是我的代码,请告诉我如何在 MemoryRouter 中制作嵌套路由器。
import { MemoryRouter as Router, Route, Routes } from 'react-router-dom';
import './App.css';
import AppLayout from './layouts/AppLayout';
import BaseLayout from './layouts/BaseLayout';
import Store from './redux/Store';
export default function App() {
return (
<Provider store={Store}>
<Router>
<BaseLayout>
<Routes>
<Route path="/" element={<AppLayout/>} />
<Route path="/auth" element={<AuthLayout/>}>
<Router path="login" element={<Login />} />
<Router path="signup" element={<Signup />} />
<Router path="forgot" element={<ForgotPassword />} />
</Route>
</Routes>
</BaseLayout>
</Router>
</Provider>
);
}
我得到了这样的警告控制台Location 'login' not found
请帮我解决这个问题。 提前谢谢你。
这是附加代码。
import { Outlet } from "react-router";
const AuthLayout = () => {
return(
<Outlet />
)
}
export default AuthLayout;
import { useEffect } from "react";
import { useNavigate } from "react-router";
const AppLayout = () => {
const access = localStorage.getItem('access')
const username = localStorage.getItem('username')
let navigate = useNavigate()
if (!access || !username){
useEffect(() => {
navigate('/auth/login')
}, [])
} else {
useEffect(() => {
navigate('/home/dashboard')
})
}
return(
<div>
AppLayout
</div>
)
}
export default AppLayout;
对我来说似乎是一个错字。您应该将 Route
与另一个 Route
嵌套,但您似乎在嵌套 Router
(这是您正在导入的 MemoryRouter
)。只需将内部 Router
更改为 Route
即可解决问题。
<Provider store={Store}>
<Router>
<BaseLayout>
<Routes>
<Route path="/" element={<AppLayout/>} />
<Route path="/auth" element={<AuthLayout/>}>
<Route path="login" element={<Login />} />
<Route path="signup" element={<Signup />} />
<Route path="forgot" element={<ForgotPassword />} />
</Route>
</Routes>
</BaseLayout>
</Router>
</Provider>