Multiple BrowserRouter 显示多个组件

IT技术 reactjs react-router
2021-04-29 00:02:30

我想用来basename分离组件。我也有全局 url,所以我最终使用了 3BrowserRouter秒。这会导致显示多个内容。如果我去/fruit/search,它会同时显示Homepage组件和FruitSearch组件的内容我究竟如何使用多个BrowserRouters?

class App extends Component {
    render() {
        return (
            <div>
                <Header/>
                <BrowserRouter basename='/vegetable'>
                    <Switch>
                        <Route exact path='/search' component={VegetableSearch}/>
                        <Route exact path='/contact/:sellerId' component={ContactSeller}/>
                    </Switch>
                </BrowserRouter>
                <BrowserRouter basename='/fruit'>
                    <Switch>
                        <Route exact path='/search' component={FruitSearch}/>
                        <Route exact path='/contact/:sellerId' component={ContactSeller}/>
                    </Switch>
                </BrowserRouter>
                <BrowserRouter>
                    <div>
                        <Route path='/login' component={Login}/>
                        <Route path='/register' component={Registration}/>
                        <Route path='/about' component={AboutUs}/>
                        <Route path='/faq' component={Faq}/>
                        <Route path='/' component={Homepage}/>
                    </div>
                </BrowserRouter>
                <Footer/>
            </div>
        );
    }
}

export default App;
1个回答

解决方法很简单。主页被渲染,因为你的路径都匹配/以及/fruit/search为避免这种情况,请使用精确,因为它仅在精确路径匹配时才会呈现组件。所以更新的代码将是

<BrowserRouter>
  <div>
    <Route exact path="/login" component={Login} />
    <Route exact path="/register" component={Registration} />
    <Route exact path="/about" component={AboutUs} />
    <Route exact path="/faq" component={Faq} />
    <Route exact path="/" component={Homepage} />
  </div>
</BrowserRouter>