React 路由器问题:React 在同一页面中呈现两个组件



我的项目遇到了问题,实际上当用户在我的应用程序中的路由之外输入不同的 url 时,我正在尝试处理 404 页面,但使用我对 React 和 react-router 的了解只需要把最后一个路由没有路径和确切路径被来自 react-router 的交换机包裹,但效果不佳, 主页同时呈现主页未找到组件。

我试图删除路由器内的容器组件,但这会使 MenuBar 之后的所有组件都消失。

我尝试将 path='*' 放在最后一个路由中,在同一页面中呈现了 2 个组件。

我正在谈论的图片: 同时 2 个组件

我的项目有 3 个主体文件:

1.- 指数.js :

import ReactDOM from 'react-dom';
import * as serviceWorker from './serviceWorker';
import ApolloProvider from './ApolloProvider';
import 'semantic-ui-css/semantic.min.css';
import 'animate.css/animate.min.css';
import './App.css';
ReactDOM.render(ApolloProvider, document.getElementById('root'));
serviceWorker.unregister();

2.- ApolloProvider.js (使用 Apollo 和 GraphQL( :

import React from 'react';
import App from './App';
import ApolloClient from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { createHttpLink } from 'apollo-link-http';
import { ApolloProvider } from '@apollo/react-hooks';
const httpLink = createHttpLink({
uri: 'http://localhost:5000/graphql'
});
const client = new ApolloClient({
link: httpLink,
cache: new InMemoryCache()
});
export default (
<ApolloProvider client={client}>
<App />
</ApolloProvider>
);

3.- 最后是应用程序.js :

import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import { Container } from 'semantic-ui-react';
import MenuBar from './Components/MenuBar';
import Home from './Pages/Home';
import Login from './Pages/Login';
import Register from './Pages/Register';
import NotFound from './Pages/404';
const App = props => (
<Router>
<Switch>
<Container>
<MenuBar />
<Route exact path='/' component={Home} />
<Route exact path='/login' component={Login} />
<Route exact path='/register' component={Register} />
<Route path='*' component={NotFound} />
</Container>
</Switch>
</Router>
);
export default App;

我只需要在用户访问"/"时渲染 Home 组件,但 react-router 如何同时渲染两个组件很奇怪,请告诉我您是否发现我错在哪里或解决方案,如果我找到解决方案或其他什么,我会发布更新。

提前感谢伙计们!.

感谢 @skyboyer 和 Dozois @Hugo问题已修复,这是更新App.js以供将来参考:

const App = props => (
<Router>
<Container>
<MenuBar />
<Switch>
<Route exact path='/' component={Home} />
<Route exact path='/login' component={Login} />
<Route exact path='/register' component={Register} />
<Route path='*' component={NotFound} />
</Switch>
</Container>
</Router>
);

此致敬意!

最新更新