我正在尝试创建一个PrivateRoute组件,如下所示:
import { useStoreState } from 'easy-peasy';
import React, { Component } from 'react';
import { Navigate, Route } from 'react-router-dom';
// import styles from'./index.module.scss';
interface PrivateRouteProps {
path: string;
element: Component;
}
const PrivateRoute: React.FC<PrivateRouteProps> = ({
path,
element,
children,
...props
}) => {
const isLoggedIn = useStoreState((state: any) => state.user.isLoggedIn);
if (!isLoggedIn) {
return <Navigate to="/login" />;
}
return (
<Route path={path} element={element} {...props}>
{children}
</Route>
);
};
export default PrivateRoute;这就是我试图使用的方法:
function App() {
return (
<div className={styles.app}>
<Router>
<Routes>
<Route path="" element={<Home />}></Route>
<Route path="login" element={<Login />}></Route>
<PrivateRoute path="cohort" element={MyComponent}></PrivateRoute>
</Routes>
</Router>
</div>
);
}但是在使用PrivateRoute时,我得到了以下错误:

发布于 2022-01-08 17:57:47
我以前尝试过的element: React.ComponentType<any>解决了打字错误,但是新的错误是
错误: PrivateRoute不是组件。的所有组件子组件必须是一个或
因此,使用v6反应路由器,只有路由组件可以是路由的子级。请参阅v6文档&您将看到身份验证模式是使用包装器组件来处理auth检查和重定向。
旧的v5模式将不再起作用。
您的PrivateRoute应该是这样的。我已经注释掉了前面的代码,所以您可以看到我所做的更改。
import { useStoreState } from "easy-peasy";
import React, { Component } from "react";
import { Navigate, Route } from "react-router-dom";
// import styles from'./index.module.scss';
interface PrivateRouteProps {
path: string;
element: React.ComponentType<any>;
// element: Component;
}
// const PrivateRoute: React.FC<PrivateRouteProps> = ({
// path,
// element,
// children,
// ...props
// }) => {
const PrivateRoute = ({ children }: { children: JSX.Element }) => {
const isLoggedIn = useStoreState((state: any) => state.user.isLoggedIn);
if (!isLoggedIn) {
return <Navigate to="/login" />;
}
// return (
// <Route path={path} element={element} {...props}>
// {children}
// </Route>
// );
return children;
};
export default PrivateRoute;然后,您的App组件将如下所示
export function App() {
return (
<div>
<Router>
<Routes>
<Route path="" element={<Home />}></Route>
<Route path="login" element={<Login />}></Route>
{/* <PrivateRoute path="cohort" element={MyComponent}></PrivateRoute> */}
<Route
path="cohort"
element={
<PrivateRoute>
<MyComponent />
</PrivateRoute>
}
/>
</Routes>
</Router>
</div>
);
}在这里,指向代码框https://codesandbox.io/s/reactrouterv6wayofdoingthings-0nmkg?file=/src/App.tsx的链接
https://stackoverflow.com/questions/70632684
复制相似问题