繁体   English   中英

如何使用 react-router 制作“404 - 未找到”页面/路线?

[英]How to make "404 - Not Found" page/route with react-router?

如何使用 React-Router 在 React 中添加 404 - Not Found 页面?

这是我的尝试:

// routes.tsx

export const routes = [
  {
    path: '/students',
    render: (props: any) => <List {...props} title={`Students`} />,
  },
  {
    path: '/teachers',
    render: (props: any) => <List {...props} title={`Teachers`} />,
  },
]
// App.tsx

import { routes } from './routes'

function App() {
  const routeComponents = routes.map(({ path, render }, key) => (
    <Route exact path={path} render={render} key={key} />
  ))

  return (
    <ThemeProvider theme={theme}>
      <CSSReset />
      <Suspense fallback={<Loader />}>
        <Router>
          <Switch>
            <Route exact path="/" component={Signin} />
            <Route path="/signin" component={Signin} />
            <Layout>{routeComponents}</Layout>
            {/* <Route component={NotFound} /> */}
            <Route path="*" component={NotFound} />
          </Switch>
        </Router>
      </Suspense>
    </ThemeProvider>
  )
}

export default App

但是当我 go 到 'http://localhost:3000/nothing' 时,我看不到我的自定义“404 - 未找到”页面,但是<Layout />组件。

我做错了什么?

堆栈:TypeScript,React@v16.13.1,react-router-dom@v5.1.2

404 响应页面不需要路径,因为它需要是在您已经拥有的页面路径之间找不到 roue 时呈现的页面。 它应该以这种方式工作:

      <Switch>
        <Route exact path="/" component={Signin} />
        <Route path="/signin" component={Signin} />
        {routeComponents()}
        <Route component={NotFound} />
      </Switch>

留空path="" 它将呈现 404 页面。

看 -

<Route path="" component={PageNotFound} />
<Route exact path="/" component={Signin} />
<Route path="/signin" component={Signin} />

这可以修复

https://stackoverflow.com/a/64651959/16361679

return (
    <ThemeProvider theme={theme}>
      <CSSReset />
      <Suspense fallback={<Loader />}>
        <Router>
          <Switch>
            <Route exact path="/" component={Signin} />
            <Route path="/signin" component={Signin} />
            <Layout>
              <Switch>
                 {routeComponents}
                 <Route path="*" component={NotFound} />
              <Switch>
            </Layout>
            
          </Switch>
        </Router>
      </Suspense>
    </ThemeProvider>
  )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM