我试图设置一些嵌套路线来添加公共布局。检查代码:
<materials>
<est_mat>
<pos>20</pos>
<item>BOX</item>
<qty>0.004</qty>
</est_mat>
<est_mat>
<pos>30</pos>
<item>xxx-xxx-xxx01</item>
<qty>1</qty>
</est_mat>
<est_mat>
<pos>40</pos>
<item>xxx-xxx-xxx02</item>
<qty>1</qty>
</est_mat>
</materials>
虽然这完全正常,但我仍然收到警告:
警告:您不应该使用&lt; Route component&gt;和&lt;路线儿童&gt;在相同的 路线;将被忽略
答案 0 :(得分:80)
CESCO的回答首先呈现AppShell
组件{<1}} 组件Switch
中的一个组件。但是这些组件不会在AppShell
内呈现,它们不会是AppShell
的子项。
在v4中打包组件时,您不再将Route
放在另一个Route
内,而是将Route
直接放在组件内。
I.E:对于包装而不是<Route component={Layout}>
,您直接使用<Layout>
。
完整代码:
<Router>
<Layout>
<Route path='/abc' component={ABC} />
<Route path='/xyz' component={XYZ} />
</Layout>
</Router>
这种变化可能是因为让React Router v4变得纯粹的想法 React所以你只使用React元素和任何其他React元素。
编辑:我删除了Switch
组件,因为它在这里没用。查看它何时有用here。
答案 1 :(得分:9)
您需要使用开关组件进行嵌套才能正常工作。另请参阅此question
// main app
<div>
// not setting a path prop, makes this always render
<Route component={AppShell}/>
<Switch>
<Route exact path="/" component={Login}/>
<Route path="/dashboard" component={AsyncDashboard(userAgent)}/>
<Route component={NoMatch}/>
</Switch>
</div>
版本4组件不带孩子,相反,你应该使用渲染道具。
<Router>
<Route render={(props)=>{
return <div>Whatever</div>}>
</Route>
</Router>
答案 2 :(得分:5)
尝试:
<Router>
<Layout>
<Route path='/abc' component={ABC} />
<Route path='/xyz' component={XYZ} />
</Layout>
</Router>
答案 3 :(得分:2)
如果您不希望Layout
在加载时运行。使用此方法:
<div className="container">
<Route path="/main" component={ChatList}/>
<Switch>
<Route exact path="/" component={Start} />
<Route path="/main/single" component={SingleChat} />
<Route path="/main/group" component={GroupChat} />
<Route path="/login" component={Login} />
</Switch>
</div>
每当历史记录发生变化时,ChatList中的 componentWillReceiveProps 都会运行。
答案 4 :(得分:0)
你也可以试试这个:
<Route exact path="/Home"
render={props=>(
<div>
<Layout/>
<Archive/>
</div>
)}
/>