未定义的typeError:无法读取未定义的属性(Reading' PathName'),使用函数重定向页面时显示了此错误

发布于 2025-01-28 20:10:04 字数 2606 浏览 1 评论 0原文

此代码正在使用If-and条件,如果用户被签名或仅登录,则他可以留在浏览页面中,否则他将被发送到登录页面等。

import React from 'react';
import { Route } from 'react-router-dom';
import {Navigate} from "react-router";




export function IsUserRedirect({ user, loggedInPath, children, ...rest }) {
  return (
    <Route
      {...rest}
      render={() => {
        if (!user) {
          return children;
        }

        if (user) {
          return (
            <Navigate
              to={{
                pathname: loggedInPath,
              }}
            />
          );
        }

        return null;
      }}
    />
  );
}

export function ProtectedRoute({ user, children, ...rest }) {
  return (
    <Route
      {...rest}
      render={({ location }) => {
        if (user) {
          return children;
        }

        if (!user) {
          return (
            <Navigate
              to={{
                pathname: 'signin',
                state: { from: location },
              }}
            />
          );
        }

        return null;
      }}
    />
  );
}

调用上述函数:,但正在显示errror {und off typeerror {und offfict typeError:无法读取不确定的属性(读取'pathName'pathName''pathName'' )}

import React from 'react';
import { BrowserRouter, Router, Routes, Route } from 'react-router-dom';
import { Home, Browse } from './pages';
import * as ROUTES from './constants/routes';
import { IsUserRedirect, ProtectedRoute } from './helpers/routes';
import { useAuthListener } from './hooks';
import SignIn from "./pages/signin";
import SignUp from "./pages/signup";

export function App() {
  const { user } = useAuthListener();

  return (
    <Router>
      <Routes>
        <IsUserRedirect user={user} loggedInPath={ROUTES.BROWSE} path={ROUTES.SIGNIN}>
          <SignIn />
        </IsUserRedirect>
        <IsUserRedirect user={user} loggedInPath={ROUTES.BROWSE} path={ROUTES.SIGNUP}>
          <SignUp />
        </IsUserRedirect>
        <ProtectedRoute user={user} path={ROUTES.BROWSE}>
          <Browse />
        </ProtectedRoute>
        <IsUserRedirect user={user} loggedInPath={ROUTES.BROWSE} path={ROUTES.HOME}>
          <Home />
        </IsUserRedirect>
      </Routes>
    </Router>
  );
}

[在此处输入图像描述] [2]

This code is using if-and condition , if a user is signed-in or just signed-up, then he can stay in browse page otherwise he will be send to the sign-in page and etc.

import React from 'react';
import { Route } from 'react-router-dom';
import {Navigate} from "react-router";




export function IsUserRedirect({ user, loggedInPath, children, ...rest }) {
  return (
    <Route
      {...rest}
      render={() => {
        if (!user) {
          return children;
        }

        if (user) {
          return (
            <Navigate
              to={{
                pathname: loggedInPath,
              }}
            />
          );
        }

        return null;
      }}
    />
  );
}

export function ProtectedRoute({ user, children, ...rest }) {
  return (
    <Route
      {...rest}
      render={({ location }) => {
        if (user) {
          return children;
        }

        if (!user) {
          return (
            <Navigate
              to={{
                pathname: 'signin',
                state: { from: location },
              }}
            />
          );
        }

        return null;
      }}
    />
  );
}

Calling the above function:But is showing the errror {Uncaught TypeError: Cannot read properties of undefined (reading 'pathname')}

import React from 'react';
import { BrowserRouter, Router, Routes, Route } from 'react-router-dom';
import { Home, Browse } from './pages';
import * as ROUTES from './constants/routes';
import { IsUserRedirect, ProtectedRoute } from './helpers/routes';
import { useAuthListener } from './hooks';
import SignIn from "./pages/signin";
import SignUp from "./pages/signup";

export function App() {
  const { user } = useAuthListener();

  return (
    <Router>
      <Routes>
        <IsUserRedirect user={user} loggedInPath={ROUTES.BROWSE} path={ROUTES.SIGNIN}>
          <SignIn />
        </IsUserRedirect>
        <IsUserRedirect user={user} loggedInPath={ROUTES.BROWSE} path={ROUTES.SIGNUP}>
          <SignUp />
        </IsUserRedirect>
        <ProtectedRoute user={user} path={ROUTES.BROWSE}>
          <Browse />
        </ProtectedRoute>
        <IsUserRedirect user={user} loggedInPath={ROUTES.BROWSE} path={ROUTES.HOME}>
          <Home />
        </IsUserRedirect>
      </Routes>
    </Router>
  );
}

[enter image description here][2]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

辞取 2025-02-04 20:10:04

它解决了

import React from 'react';
import { BrowserRouter, Router, Route } from 'react-router-dom';
import { Home, Browse } from './pages';
import * as ROUTES from './constants/routes';
import { IsUserRedirect, ProtectedRoute } from './helpers/routes';
import { useAuthListener } from './hooks';
import SignIn from "./pages/signin";
import SignUp from "./pages/signup";
import {Routes, useRoutes} from "react-router";

export function App() {
  const { user } = useAuthListener();

  return (
    <BrowserRouter>
      <Routes>
        <Route path="/browse" element = {
            <ProtectedRoute>
              <Browse />
            </ProtectedRoute>} />
           <Route path="/signup" element = {
             <IsUserRedirect>
              <SignUp />
             </IsUserRedirect>} />
            <Route path="/signin" element = {
             <IsUserRedirect>
              <SignIn />
             </IsUserRedirect>} />
             <Route path="/home" element = {
             <IsUserRedirect>
              <Home />
             </IsUserRedirect>} />





      </Routes>
    </BrowserRouter>
  );
}

import React from 'react';

import {Navigate} from "react-router";
import {useAuthListener} from "../hooks";

export function ProtectedRoute({children}) {
  const auth =useAuthListener();
  return auth ? children : <Navigate to="/signin" />;


}

export function IsUserRedirect({ loggedInPath,children }) {
   const auth =useAuthListener();
  return auth ? children : <Navigate to="/browse" />;
}

It is solved

import React from 'react';
import { BrowserRouter, Router, Route } from 'react-router-dom';
import { Home, Browse } from './pages';
import * as ROUTES from './constants/routes';
import { IsUserRedirect, ProtectedRoute } from './helpers/routes';
import { useAuthListener } from './hooks';
import SignIn from "./pages/signin";
import SignUp from "./pages/signup";
import {Routes, useRoutes} from "react-router";

export function App() {
  const { user } = useAuthListener();

  return (
    <BrowserRouter>
      <Routes>
        <Route path="/browse" element = {
            <ProtectedRoute>
              <Browse />
            </ProtectedRoute>} />
           <Route path="/signup" element = {
             <IsUserRedirect>
              <SignUp />
             </IsUserRedirect>} />
            <Route path="/signin" element = {
             <IsUserRedirect>
              <SignIn />
             </IsUserRedirect>} />
             <Route path="/home" element = {
             <IsUserRedirect>
              <Home />
             </IsUserRedirect>} />





      </Routes>
    </BrowserRouter>
  );
}

import React from 'react';

import {Navigate} from "react-router";
import {useAuthListener} from "../hooks";

export function ProtectedRoute({children}) {
  const auth =useAuthListener();
  return auth ? children : <Navigate to="/signin" />;


}

export function IsUserRedirect({ loggedInPath,children }) {
   const auth =useAuthListener();
  return auth ? children : <Navigate to="/browse" />;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文