javascript - React 路由器问题 : React render two components in the same page

标签 javascript reactjs react-router react-apollo apollo-client

我的项目遇到了问题,实际上,当用户在我的应用程序中的路由之外输入不同的 url 时,我正在尝试处理 404 页面,但使用我对 React 和 React-router 的了解,只需将最后一条路由没有路径,并且由react-router的Switch包裹了精确路径,但效果不佳,主页正在渲染Home同时还有 NotFound 组件。

我尝试删除 Router 内的 Container 组件,但这使得 MenuBar 之后的所有组件都消失了。

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

我正在谈论的内容的图片: 2 components at same time

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

1.- Index.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.- 最后是 App.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 和 @Hugo Dozois,问题已得到解决,这是更新后的 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>
);

最诚挚的问候!

关于javascript - React 路由器问题 : React render two components in the same page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58278155/

相关文章:

javascript - 为什么这个数组不打印?

javascript - 删除对 Gatsby 的引用

javascript - 是的,选择字段(下拉菜单)react-hook-form 上的验证不起作用

reactjs - 当包裹在 <Provider> 中时,React Native Context 呈现空白屏幕

javascript - 与阿多尼斯 react

javascript - 如何安全地测量用户的时间

javascript - 在 1.10.2 Jquery 版本中替换 $.uaMatch

javascript - 在 moment.js Nodejs 中将毫秒转换为日期

javascript - 在 react onclick 中循环遍历数组

javascript - Reactjs 路由未返回正确的结果