import { Route, Routes, BrowserRouter as Router } from "react-router-dom";
import { SnackbarProvider } from "notistack";
import { useState, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";

import { auth, fTeacher, sTeacher, student, admin } from "./features/selectors";
import { routes } from "./constants";

import UserHeader from "./components/UserHeader";
import Sidebar from "./components/Sidebar";
import Loader from "./components/Loader";

import Admin from "./pages/Admin/Admin";
import Auth from "./pages/Auth/Auth";
import FormTeacher from "./pages/FormTeacher/FormTeacher";
import SubTeacher from "./pages/SubjectTeacher/SubTeacher";
import Student from "./pages/Student/Student";

import { Container } from "reactstrap";

function App() {
  const [isLoading, setIsLoading] = useState(false);

  const { isAuthLoading } = useSelector(auth);
  const { isAdminLoading } = useSelector(admin);
  const { isStudentLoading } = useSelector(student);
  const { isFTeacherLoading } = useSelector(fTeacher);
  const { isSTeacherLoading } = useSelector(sTeacher);

  return (
    <>
      <Router>
        {isAuthLoading ||
        isLoading ||
        isAdminLoading ||
        isStudentLoading ||
        isFTeacherLoading ||
        isSTeacherLoading ? (
          <Loader />
        ) : (
          ""
        )}

        <Routes>
          <Route path="/" element={<Auth />} />
          <Route
            path="/admin/*"
            element={
              <div>
                <Sidebar />
                <div className="main-content">
                  <UserHeader />
                  <Container>
                    <Admin setIsLoading={setIsLoading} />
                  </Container>
                </div>
              </div>
            }
          />
          <Route
            path="/form-teacher/*"
            element={
              <div>
                <Sidebar />
                <div className="main-content">
                  <UserHeader />
                  <Container>
                    <FormTeacher setIsLoading={setIsLoading} />
                  </Container>
                </div>
              </div>
            }
          />
          <Route
            path="/sub-teacher/*"
            element={
              <div>
                <Sidebar />
                <div className="main-content">
                  <UserHeader />
                  <Container>
                    <SubTeacher setIsLoading={setIsLoading} />
                  </Container>
                </div>
              </div>
            }
          />
          <Route
            path="/student/*"
            element={
              <div>
                <Sidebar />
                <div className="main-content">
                  <UserHeader />
                  <Container>
                    <Student setIsLoading={setIsLoading} />
                  </Container>
                </div>
              </div>
            }
          />
        </Routes>
      </Router>
      <SnackbarProvider
        anchorOrigin={{ horizontal: "center", vertical: "bottom" }}
      />
    </>
  );
}

export default App;

我有这个应用程序,一切在"localhost:5173"上运行得很好 如果我直接转到像"http://localhost:5173/admin/result"这样的URL,它就会直接转到特定的组件.但当我部署应用程序的构建版本并转到新的URL "https://smsystem.netlify.app/admin/result"时,Netlify抛出了一个404Not Found错误.如果我在应用程序中导航,它工作得很好,我只是不能直接进入URL.

推荐答案

根据CRA部署文档,对于Netlify,您可以创建一个重定向文件,以将所有页面请求的根index.html文件返回到应用程序中.

创建一个包含以下内容的public/_redirects文件:

/*  /index.html  200

构建过程应该将"/public"目录复制到构建输出.

Javascript相关问答推荐

Flisk和JS错误:未捕获的Syntax错误:意外的令牌'<'

不渲染具有HTML参数的React元素

node TS:JWT令牌签名以验证客户端和后台问题之间的身份验证

字节数组通过echo框架传输到JS blob

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

角色 map 集/spritebook动画,用户输入不停止在键上相位器3

如何找出摆线表面上y与x相交的地方?

如何禁用附加图标点击的v—自动完成事件

如何使覆盖div与可水平滚动的父div相关?

未捕获错误:[]:getActivePinia()被调用,但没有活动Pinia.🍍""在调用app.use(pinia)之前,您是否try 使用store ?""

从Node JS将对象数组中的数据插入Postgres表

JSDoc创建并从另一个文件导入类型

确保函数签名中的类型安全:匹配值

为什么我的自定义元素没有被垃圾回收?

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

使用线性插值法旋转直线以查看鼠标会导致 skip

Jexl to LowerCase()和Replace()

与在编剧中具有动态价值的定位器交互

JSON Web令牌(JWT)错误:RSA密钥对的签名无效

暂停后只有一次旋转JS