Den*_*yen 10 javascript reactjs
我目前对反应路由器 dom@6 感到困扰。就像,我想将用户重定向到其他页面(如果他们登录)。但是当我使用 Navigate 组件时,它会抛出错误:
“[Navigate] 不是组件。路由的所有子组件都必须是路由或 React.Fragment”
虽然我已经把它包裹在片段中,但结果仍然是一样的。请帮助我,这是我的代码:
import {BrowserRouter as Router, Routes, Route, Navigate} from 'react-router-dom';
import Home from './pages/Home';
import ProductList from './pages/ProductList';
import Product from './pages/Product';
import Register from './pages/Register';
import Login from './pages/Login';
import Cart from './pages/Cart';
import ErrorPage from './pages/ErrorPage';
function App() {
const user = true;
return (
<Router>
<Routes>
<Route path="/" element={<Home/>} />
<Route path="/products/:category" element={<ProductList/>} />
<Route path="/product/:id" element={<Product/>} />
<Route path="/cart" element={<Cart/>} />
<Route path="/dang-ky" element={<Register/>} />
<Route path="/dang-nhap" element={<Login/>} >
{user ? <><Navigate to="/" replace/></> : <Login/>}
</Route>
<Route path="*" element={<ErrorPage/>} />
</Routes>
</Router>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud)
小智 9
如果登录则重定向用户,不一定需要导航,您可以简单地指定您想要到达的元素,例如:
<Route exact path="/" element={user ? <Home/> : <Login />}/>
Run Code Online (Sandbox Code Playgroud)
您可以简单地使用“react-router-dom”库中的 Navigate 组件,并使用它在“/login”路由的元素属性内进行重定向。
import { BrowserRouter as Router, Routes, Route, Navigate } from "react-router-dom";
<Route path="login" element={user ? <Navigate to="/"/> : <Login />} /> {/* If user is logged in, then redirect to home page, else go to login page */}
Run Code Online (Sandbox Code Playgroud)
编辑:
这也是一个可能的解决方案,缺点是无法正确重定向。您只需确保正确设置后备路线即可。
{isSignedIn && <Route path="" element={} />}
Run Code Online (Sandbox Code Playgroud)
我建议使用 AuthRout 来包装您的路由。
{isSignedIn && <Route path="" element={} />}
Run Code Online (Sandbox Code Playgroud)
这样,如果用户未登录,他就会被重定向
| 归档时间: |
|
| 查看次数: |
11619 次 |
| 最近记录: |