如何解决React / NextJS:使用功能组件实现路由保护的更好方法
我想为我的受保护页面实现路由防护,我的整个应用程序都使用功能组件。
我知道在ReactJS / NextJS中有不同的技术可以实现这一点:
- 使用HOC
- 在受保护的组件内使用useEffect()
- 或使用返回受保护组件的功能组件
const PrivateComponent = (Component: FC<any> | SFC<any>) => {
return () => {
const { isLoggedin } = useSelector(
({ user: { currentUser } }: IRootState) => currentUser,);
useEffect(() => {
if (!isLoggedin) Router.replace(HOME_PATH);
// tslint:disable-next-line: align
},[isLoggedin]);
return <Component />;
};
};
我可以按如下方式使用它:
const MyComponent: React.SFC<{}> = () => {
...
...
...
}
export default PrivateComponent(MyComponent);
在这种情况下,它可以正常工作。
问题
要包装的组件或页面收到一些props
在这种情况下:
const MyComponentWithProps: React.SFC<{editFormState: IUnkNownObject; slug: string | string[];}> = ({editFormState,slug}) => {
...
...
...
}
export default PrivateComponent(MyComponentWithProps);
尝试重用此组件MyComponentWithProps
时出现此错误:
Type '{ editFormState: IUnkNownObject; slug: string | string[]; }' is not assignable to type 'IntrinsicAttributes'.
Property 'editFormState' does not exist on type 'IntrinsicAttributes'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。