【发布时间】:2018-10-21 07:51:14
【问题描述】:
我有……
后端
Node.js/express 服务器在对某些路由发出请求时提供文件。
前端
React 页面调用后端请求数据以填充页面。
我在前端使用 react-router v4。每当我导航到不在确切路径的路线并重新加载页面时,我都会收到 404 错误。我明白为什么这不起作用;浏览器向 react-router 处理的路径发出请求,由于它在服务器上找不到该路由,所以我得到 404。
我正在寻找解决这个问题的方法。
// BrowserRouter imported as Router
<Router>
<Route exact path='/main' component={Main} />
<Route path='/sub1' component={SubOne} />
<Route path='/sub2' component={SubTwo} />
</Router>
当我在浏览器中转到/main 时,会呈现<Main />。假设在<Main /> 内部,分别有指向/sub1 和/sub2 的链接。我点击/sub2。组件和页面内容呈现不会失败。然后我刷新页面,无论是偶然还是有意(比如组件 Sub2 将状态提升到 Main)。
如何避免刷新后出现 404?如果我使用 React-Router,如何在刷新后获取“我所在”的页面/组件?
【问题讨论】:
-
我相信这与您的应用程序没有在服务器端呈现有关。如果您使用
create-react-app cli,它会自动为您执行此操作。但是,如果您使用自己的样板,则需要使用 webpack 来处理 404 回退。 -
正确;我没有使用 create-react-app,不幸的是我现在无法切换到它。我必须为当前的设置设计一个解决方案...你如何设置 webpack 来处理 404 回退?
-
确保在 webpack 输出中指定了
publicPath: '/'。
标签: javascript reactjs react-router