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

标签 reactjs react-router react-hooks react-router-dom

我尝试在映射和 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/

相关文章:

javascript - react 子 JSX 元素不从父级继承

reactjs - 使用 react 路由器在路线上 react 设置状态/属性

javascript - React.StrictMode : SetState function in useEffect is run multiple times when effect is run once

javascript - 如何从组件外部访问路由参数?

javascript - 如何在不删除数组其余部分的情况下从 React 状态数组中删除组件?

apollo - 使用 Apollo React 钩子(Hook)重新获取查询

reactjs - 将 redux 状态复制到本地状态是否违反 redux 哲学?

javascript - 如何向 json 添加新值

reactjs - 自定义 Hook - 返回状态和设置状态

reactjs - React-Router v4 和 Redux 身份验证