reactjs 当react应用程序使用yarn start或npm start运行时,如何更改默认网址?

xam8gpfp  于 2023-01-05  发布在  React
关注(0)|答案(1)|浏览(489)

我创建了一个react应用程序,其中我有一个登录页面作为第一个页面,我们登录它进入应用程序。所以当我运行应用程序使用“yarn start”的应用程序运行在“localhost:8082”默认情况下,但我希望当我运行“yarn start”命令,它显示的网址像“localhost“8082/Login”,因为第一个页面是登录页面。
当我成功登录时,它再次显示“localhost:8082”,但我希望登录后,它显示“localhost:8082/Home”。
那么有没有什么办法可以像我提到的这样改变网址。
附上一些代码以供参考。
应用程序.tsx代码:-

import "./css/App.css";
import {
  AuthenticatedTemplate,
  UnauthenticatedTemplate,
} from "@azure/msal-react";
import { Login } from "./pages/Login";
import Routers from "./components/Routers";

function App() {
  return (
    <div>
      <AuthenticatedTemplate>
        <Routers />
      </AuthenticatedTemplate>

      {
        <UnauthenticatedTemplate>
          <Login />
        </UnauthenticatedTemplate>
      }
    </div>
  );
}

export default App;

路由器.tsx代码:-

import { BrowserRouter, Routes, Route, Outlet} from "react-router-dom";
import Home from "../pages/Home";
import About from "../pages/About";
import Contact from "../pages/Contact";

function Routers() {
  return (
    <div className="Routers">
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/Home" element={<Home />} /> 
          <Route path="/About" element={<About />} />
          <Route path="/Contact" element={<Contact />} />
        </Routes>
        <Outlet />
      </BrowserRouter>
    </div>
  );
}

export default Routers;

所以我希望当我运行“纱开始”命令的第一个页面将是“localhost:8082/登录”,当我登录的网址必须是“localhost:8082/主页”。

我尝试过通过不同的方式来实现它,但我无法做到。我不想在package.json中添加主页元素,因为它在我的情况下不起作用。

e4eetjau

e4eetjau1#

除了直接启动应用程序并导航到"/login"之外,你 * 可以 * 在应用程序的根组件中使用一个挂载useEffect钩子来手动重定向到"/login"。我真的建议实现受保护的路由,并将主"/"路由置于保护之下,这样未经验证的用户将自动重定向到"/login"
创建受保护的经过身份验证和未经身份验证的路由组件。

import { Navigate, Outlet, useLocation } from 'react-router-dom';
import {
  AuthenticatedTemplate,
  UnauthenticatedTemplate,
} from "@azure/msal-react";
import { useAuth } from '../path/to/AuthContext'; // <-- you'll need to implement this, however it fits with the Azure authentication

const PrivateRoutes = () => {
  const location = useLocation();
  const { isAuthenticated } = useAuth();

  if (isAuthenticated === undefined) {
    return null; // or loading indicator/spinner/etc
  }

  return isAuthenticated 
    ? (
      <AuthenticatedTemplate>
        <Outlet />
      </AuthenticatedTemplate>
    )
    : <Navigate to="/login" replace state={{ from: location }} />;
}

const AnonymousRoutes = () => {
  const { isAuthenticated } = useAuth();

  if (isAuthenticated === undefined) {
    return null; // or loading indicator/spinner/etc
  }

  return isAuthenticated 
    ? <Navigate to="/" replace />
    : (
      <UnauthenticatedTemplate>
        <Outlet />
      </UnauthenticatedTemplate>
    );
}

Routers.tsx

import { BrowserRouter, Routes, Route } from "react-router-dom";
import Home from "../pages/Home";
import About from "../pages/About";
import Contact from "../pages/Contact";
import { Login } from "./pages/Login";
import { AnonymousRoutes, PrivateRoutes } from '../components/auth';

function Routers() {
  return (
    <div className="Routers">
      <BrowserRouter>
        <Routes>
          <Route element={<PrivateRoutes />}>
            <Route path="/" element={<Home />} />
            <Route path="/Home" element={<Home />} /> 
            <Route path="/About" element={<About />} />
            <Route path="/Contact" element={<Contact />} />
          </Route>
          <Route element={<AnonymousRoutes />}>
            <Route path="/login" element={<Login />} />
          </Route>
        </Routes>
        <Outlet />
      </BrowserRouter>
    </div>
  );
}

App.tsx

import Routers from "./components/Routers";

function App() {
  return (
    <div>
      <Routers />
    </div>
  );
}

相关问题