这是我要创建的布局
Login => '/login'
Main => '/'
=> Home => '/'
=> Pageone = '/pageone'
=> Pagetwo = '/pagetwo'
这是我尝试执行的代码
<BrowserRouter>
<Switch>
<Main>
<Route exact path='/' component={Home} />
<Route path='/pageone' component={PageOne}/>
<Route path='/pagetwo' component={PageTwo}/>
</Main>
<Route path="/login" component={Login}/>
</Switch>
</BrowserRouter>
虽然没有使用Switch
嵌套路由,但是Main
和Login
都呈现了,即使使用exact
时也是如此。使用Switch
时,导航到嵌套路线会显示空白页,但外部路线会完美运行。
但是只需将<Route path="/login" component={Login}/>
更改为top即可使所有操作完美地运行
<BrowserRouter>
<Switch>
<Route path="/login" component={Login}/>
<Main>
<Route exact path='/' component={Home} />
<Route path='/pageone' component={PageOne}/>
<Route path='/pagetwo' component={PageTwo}/>
</Main>
</Switch>
</BrowserRouter>
这是预期的行为还是错误?
Main
组件内容
<div>
<NavBar ></NavBar>
{this.props.children}
<FooTer></FooTer>
</div>
这是我的依赖项
"bootstrap": "^4.2.1",
"classnames": "^2.2.6",
"react": "^16.7.0",
"react-dom": "^16.7.0",
"react-materialize": "^2.6.0",
"react-router-dom": "^4.3.1",
"react-scripts": "2.1.3"
答案 0 :(得分:0)
WHERE
的预期行为是仅呈现一条匹配的路由。仅将互斥的路由放入其中。阅读您的问题,我认为路线并非完全独立。例如。 Switch
路由中存在的某些内容可能也需要在其他路由中显示。为此,您可以尝试--
/
并在<BrowserRouter>
{/* Shared content in this route. This is always matched and rendered. */}
<Route path="/" component={SharedChrome} />
<Switch>
<Route path="/" component={Home} />
<Route path='/pageone' component={PageOne}/>
<Route path='/pagetwo' component={PageTwo}/>
<Route path="/login" component={Login}/>
</Switch>
</BrowserRouter>
内部修改路由组件中的内容,使其不具有Switch
组件将呈现的共享内容。