当前位置: 首页 > 知识库问答 >
问题:

如何避免React中重新加载页面时出现404错误?

慕祯
2023-03-14

我有一个反应应用程序开发的底漆-反应模板。它有一个管理仪表板,在仪表板侧板中有几条路由。我已经在我的index.js中设置了一个身份验证路由,当我访问每条路由时,它都运行得很好。但是当重新加载页面时,页面显示404页面找不到!

我保护“/”路径不受AUthrote的影响,这样每个以“/”开头的路径都受到保护(我在仪表板中有路由,如“/usertable”、“/users”、“/payments”等)。我不确定这里是否发生了错误,因为有些路由(在仪表板之外)应该在没有“/signin”之类的身份验证的情况下访问。

我假设如果我可以保护仪表板内的每条路由的精确路径(像exact path=“/usertable”)而不是保护所有“/”路径,404问题就会解决!但当我这样做时,注销后,我可以通过浏览器返回按钮返回仪表板,这会产生另一个问题。我该怎么解决这个?

index.js

import React from 'react';
import { BrowserRouter, Switch, Route, Redirect } from 'react-router-dom';
import { render } from 'react-dom';
import Auth from './auth';
import AppProvider from './components/AppProvider/AppProvider';
import Dashboard from './containers/Dashboard';
import { ForgotPassword, Signin, ResetPassword } from './pages';
import registerServiceWorker from './registerServiceWorker';

const AuthRoute = ({ component: Component, ...rest }) => (
  <Route {...rest} render={props => {
    if (Auth.isAuthenticated()) {
      return <Component {...props} />
    }
    else {
      return <Redirect to={{ pathname: '/signin' }} />
    }
  }} />
)

export default render(
  <AppProvider>
    <BrowserRouter>
      <Switch>
        <Route exact path="/forgot" component={ForgotPassword} />
        <Route exact path="/signin" component={Signin} />
        <Route exact path="/reset/:token?" component={ResetPassword} />
        <AuthRoute path="/" component={Dashboard} />
        <Route path="/" component={Dashboard} />
      </Switch>
    </BrowserRouter>
  </AppProvider>
  , document.getElementById('root'));

registerServiceWorker();

共有2个答案

潘秦斩
2023-03-14

如果您使用netlify进行部署,那么在公用文件夹中创建一个_redirects文件,并向其中添加以下行。

/*  /index.html  200
澹台俊材
2023-03-14

当您重新加载页面时,您会得到一个404,因为您在实际接收html文档响应之前首先访问了服务器,并且您的服务器可能只配置为在get'/'时发送index.html

您需要将服务器设置为捕获所有传入的url(/*)并呈现index.html

请查看以下详细答案以了解更多信息:React-Router URL在手动刷新或写入时不起作用

 类似资料:
  • 我有一个使用文本输入的表单和一个将文本添加到数据库表的控制器 我使用ajax调用这个函数,如下所示: 数据已成功插入。然而,当控制器试图重定向到时,我遇到了一个错误 我的背景。xml有以下条目 我尝试将addStuff的返回类型更改为void。然而,我收到了相同的错误消息。 如何在不重定向或刷新页面的情况下插入到数据库?

  • 问题内容: 我知道有一些关于该主题的帖子。我已经阅读了大多数内容,但是我认为我不够熟练,无法理解应该怎么做。 我有一个AngularJS 1.0.7 Web应用程序。我刚刚将其配置为html5Mode以美化我的URL。我的网址现在看起来不错,但是出现了一个新的问题,我在更改之前没有遇到过。首次加载索引页面时,可以毫无问题地对其进行刷新。但是,如果我导航到示例/ about中的其他页面,然后刷新页面

  • 我正在使用AngularJS和Ionic框架构建一个应用程序。我的应用程序需要有一个注销按钮。当用户按下注销按钮时,我想重新加载页面,以便重新引导应用程序,并清除所有缓存数据。基于这个StackOverflow问题,我应该能够只做<<代码>$窗口。地方重新加载(true)。如果我只是通过ionic serve在浏览器中运行该应用程序,效果很好。然而,当我在实际设备上运行它时,屏幕会变为空白,再也不

  • 问题内容: 给定以下目录结构: 您可以看到 my-project 和 module-x 都需要React。我对这个问题有同样的问题,但建议是从package.json依赖项中删除反应。我这样做了,只要在 module-x中 没有安装node_modules,它就可以正常工作,因为Webpack将使用 my-project中的 React 。但是,如果我正在开发 module-x 并已安装node_

  • 我正在试图找到一个解决方案,解决重新加载后在中崩溃的问题。情况: 树形结构 现在我必须添加。为此,我得到了,并使用方法I添加。 在这之后,我调用树的DefaultTreeModel上的方法。 问题是,在这个调用之后,树将全部崩溃: 而且我必须手动展开节点以确保节点被添加... 我的密码。。。 当我添加节点时。。。 问题在于节点的位置。和节点没有层次结构。 有没有办法避免这种行为?谢谢 也许另一种方

  • 问题内容: 我有一个带有标题的表,一个带有输入字段的行,一个带有数据的行。像这样。http://brow.hu/sitegen/stackoverflow_table_example.png 如果有人在输入字段中输入内容,我想使用ajax查询过滤数据。收到新表后,我更改了旧表的内容: 并闪烁。如何避免呢? 问题答案: 避免闪烁的一种方法称为双缓冲。在Ajax中,只需两个div占用相同的空间即可完成