gpt4 book ai didi

reactjs - 如何在具有 protected 功能的 React Router 中映射路由?

转载 作者:行者123 更新时间:2023-12-05 06:55:27 25 4
gpt4 key购买 nike

我尝试在映射和 protected 函数中使用 React Route 处理我的代码;

这是组件的数组;

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 的渲染方法。”

最佳答案

您在方法 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} />} />;
}
};

关于reactjs - 如何在具有 protected 功能的 React Router 中映射路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65337865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com