【问题标题】:React router always display at the bottom the Error pageReact 路由器总是显示在错误页面的底部
【发布时间】:2021-08-14 13:31:29
【问题描述】:

我在我的 react 应用程序中使用错误页面时遇到问题。 404 页面始终显示在我呈现的每个页面的底部。我是新来的反应。我希望有人可以帮助我。

这是我的 App.js

import {BrowserRouter as Router,Switch,Route} from 'react-router-dom';

import Login from './components/auth/Login';
import Register from './components/auth/Register';
import ErrorPage from './components/ErrorPage';
import Order from './components/Order';
import Navbar from './components/partials/Navbar';
import Footer from './components/partials/Footer';
import Shop from './components/Shop';
import ItemDetails from './components/ItemDetails';
import Cart from './components/Cart';
import Customize from './components/Customize';


const App = () => {

  return (
    <>
     <Router>
       <Switch>
        
         <Route exact path='/login'>
           <Login />
         </Route>
         
         <Route exact path='/register'>
           <Register />
         </Route>

         <div>
            <Navbar />

              <Route exact path='/'>
                <Shop />
              </Route>

              <Route exact path='/order'>
                <Order />
              </Route>

              <Route exact path='/item/details'>
                <ItemDetails />
              </Route>

              <Route exact path='/cart'> 
                <Cart />
              </Route>

              <Route exact path='/customize'>
                <Customize />
              </Route>

              <Route component={ErrorPage} />
          </div>   
          
       </Switch>
     </Router> 
     <Footer />
    </>
  );
}

export default App;

我在 react 中搜索了有关处理错误页面的信息,我发现路由的顺序很重要,但我不明白为什么即使它在底部,我仍然会收到错误页面。谢谢各位。

【问题讨论】:

    标签: javascript reactjs react-router react-router-dom


    【解决方案1】:

    那是因为 switch 组件返回了根处第一个满足路径条件的子元素。如果路径条件不存在,则将其评估为真。在您的情况下,您有 3 个子登录、注册和将始终被评估为 true 的 div。因此,只需将所有路由移至交换机的根目录:

    <Router>
        <Switch>
    
            <Route exact path='/login'>
                <Login />
            </Route>
            
            <Route exact path='/register'>
                <Register />
            </Route>
    
            <div>
                <Navbar />
                <Switch>
                    <Route exact path='/'>
                        <Shop />
                    </Route>
    
                    <Route exact path='/order'>
                        <Order />
                    </Route>
    
                    <Route exact path='/item/details'>
                        <ItemDetails />
                    </Route>
    
                    <Route exact path='/cart'> 
                        <Cart />
                    </Route>
    
                    <Route exact path='/customize'>
                        <Customize />
                    </Route>
    
                    <Route component={ErrorPage} />
                </Switch>
            </div>   
            
        </Switch>
    </Router> 
    
    

    【讨论】:

    • 此代码适用于我,但我需要每个页面中的导航栏。
    • 我的意思是除了登录和注册页面外,所有页面都需要导航栏。
    • 我明白你想要达到的目标。那么你只需要添加另一个开关@PaulAndres 检查我的编辑
    • 这对我来说很好用!非常感谢!当我在 404 页面中时,我还需要确定如何删除导航栏和页脚。谢谢顺便说一句! :)
    猜你喜欢
    • 2018-02-16
    • 2022-01-25
    • 2020-11-13
    • 2021-01-29
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多