React PWA:create-react-app 使用 react-router 呈现 404 页面
React PWA: create-react-app using react-router renders 404 page
只有当我将我的 PWA 添加到主屏幕并从那里 运行 应用程序时才会发生这种情况。 我没有看到这种行为当我 运行 移动或桌面浏览器上的应用程序时。
我正在开发一个使用 create-react-app 构建的 React 应用程序。在 运行ning npm run build
并使用任何本地 http 服务器提供服务后,它工作正常。一旦我将它部署到 Firebase 或 now
并在 Firefox 或 Chrome 移动浏览器上打开该站点,它似乎也能正常工作。但是,当我点击弹出窗口中的 "Add to Homescreen" 按钮时,它会被添加,但是从主屏幕图标打开它会呈现 404 路由。
如果没有路径与 URL 匹配,我使用 react-router 的 <Switch/>
组件路由到自定义 404 页面。这是我定义路由器的方式 "configuration":
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route path="/login" component={Login} />
<Route path="/sign-up" component={SignUp} />
<Route
render={() => (
<div>
<h1>Error 404: Not Found</h1>
<Link to="/">Go Home</Link>
</div>)}
/>
</Switch>
</Router>
我的 package.json
中的软件包版本:
react
: ^16.2.0
react-scripts
: 1.1.0
react-router-dom
: ^4.2.2
原因是当从主屏幕打开应用程序时,它会查找由 create-react-app 创建的 manifest.json
文件中提到的 ./index.html
路由。此路径与路由器配置中的任何路由都不匹配,因此呈现 404 页面。如果没有创建 404 页面,则会显示一个空白页面,因为所有路由都会 return 为空。
如果您在浏览器上手动访问 URL,您可以观察到相同的行为:https://website.com/index.html。该应用程序将呈现空白页面或 404 页面(如果您创建了一个页面)。
为了解决这个问题,请按如下方式更改 manifest.json
文件中的 start_url
字段:
{
...
start_url: "/"
}
现在,当应用程序从主屏幕启动时,它将查找 '/'
路径而不是 '/index.html'
。
只有当我将我的 PWA 添加到主屏幕并从那里 运行 应用程序时才会发生这种情况。 我没有看到这种行为当我 运行 移动或桌面浏览器上的应用程序时。
我正在开发一个使用 create-react-app 构建的 React 应用程序。在 运行ning npm run build
并使用任何本地 http 服务器提供服务后,它工作正常。一旦我将它部署到 Firebase 或 now
并在 Firefox 或 Chrome 移动浏览器上打开该站点,它似乎也能正常工作。但是,当我点击弹出窗口中的 "Add to Homescreen" 按钮时,它会被添加,但是从主屏幕图标打开它会呈现 404 路由。
如果没有路径与 URL 匹配,我使用 react-router 的 <Switch/>
组件路由到自定义 404 页面。这是我定义路由器的方式 "configuration":
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route path="/login" component={Login} />
<Route path="/sign-up" component={SignUp} />
<Route
render={() => (
<div>
<h1>Error 404: Not Found</h1>
<Link to="/">Go Home</Link>
</div>)}
/>
</Switch>
</Router>
我的 package.json
中的软件包版本:
react
: ^16.2.0react-scripts
: 1.1.0react-router-dom
: ^4.2.2
原因是当从主屏幕打开应用程序时,它会查找由 create-react-app 创建的 manifest.json
文件中提到的 ./index.html
路由。此路径与路由器配置中的任何路由都不匹配,因此呈现 404 页面。如果没有创建 404 页面,则会显示一个空白页面,因为所有路由都会 return 为空。
如果您在浏览器上手动访问 URL,您可以观察到相同的行为:https://website.com/index.html。该应用程序将呈现空白页面或 404 页面(如果您创建了一个页面)。
为了解决这个问题,请按如下方式更改 manifest.json
文件中的 start_url
字段:
{
...
start_url: "/"
}
现在,当应用程序从主屏幕启动时,它将查找 '/'
路径而不是 '/index.html'
。