reactjs - 如何在 React Router 中使用受保护的功能映射路由?
问题描述
我尝试在地图和受保护的函数中使用 React Route 处理我的代码;
This 组件的数组;
import LoginContainers from "../Containers/LoginContainers/LoginContainers";
import RegisterContainers from "../Containers/RegisterContainers/RegisterContainers";
import ChattingApp from "../Containers/ChattingApp/ChattingApp";
const RoutesMaster = [
{
Path: '/login',
Component: LoginContainers,
Title: 'Login',
AuthRequired: false
},{
Path: '/register',
Component: RegisterContainers,
Title: 'Register',
AuthRequired: true
},{
Path: '/',
Component: ChattingApp,
Title: 'Janus Chat',
AuthRequired: true
},
]
这是主要组件中的代码;
import React from 'react';
import {BrowserRouter, Switch, Route, useHistory} from "react-router-dom";
import RoutesMaster from "./RoutesMaster";
const RoutesRender = (Routes, Key) => {
const History = useHistory();
if (Routes.AuthRequired) {
History.push("/auth/login");
} else {
return (
<Route exact key={Key} path={Routes.Path} render={(props) => <Routes.Component {...props} />} />
)
}
}
const RoutesProvider = () => {
return (
<React.Fragment>
<BrowserRouter>
<Switch>
{RoutesMaster.map((Routes, Index) => (
<RoutesRender Routes={Routes} Key={Index} />
))}
</Switch>
</BrowserRouter>
</React.Fragment>
);
}
export default RoutesProvider;
但它显示了这条消息;
“错误:元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:未定义。您可能忘记从定义它的文件中导出组件,或者您可能混淆了默认和命名的导入。检查渲染方法Router.Consumer
。”
解决方案
您正在返回 undefined,或者更确切地说,在 method 中没有返回任何内容RoutesRender
,并且 react 要求您至少在 VDOM 中返回null
。
这是您的代码,其中包含更改和注释以查看它的位置:
const RoutesRender = ({ Routes, Key}) => {
const History = useHistory();
if (Routes.AuthRequired) {
History.push('/auth/login');
return null; // This is return value that is needed
} else {
return <Route exact key={Key} path={Routes.Path} render={(props) => <Routes.Component {...props} />} />;
}
};
推荐阅读
- vue.js - 如何在 Vue.js 中访问过滤后的数组计算值?
- python-3.x - 将ttk模块导入Python后如何即时查找所有构造方法
- android - Android Google Maps 支持 MultiPolygon 中的交叉点
- c# - 如何从命名列表的 json 数组创建 C# 字典?
- android - Android 测试 - 如何验证 navController.currentDestination.arguments?
- html - 如何在 HTML 站点中实现 python 脚本,以便用户可以使用 python 脚本输入输入
- graphics - 在 Kivy 中,是否可以在具有捏合和缩放功能的图像上绘制图层?
- azure-devops - DevOps REST API:使用“userDescriptor”参数
- c++ - 如何从迭代变量中获取 constexpr?
- angular - Express API 适用于 curl 但不适用于浏览器