I'm trying to set up some nested routes to add a common layout. Check the code out:
<Router> <Route component={Layout}> <div> <Route path='/abc' component={ABC} /> <Route path='/xyz' component={XYZ} /> </div> </Route> </Router>
While this works perfectly fine, I still get the warning:
Warning: You should not use <Route component> and <Route children> in the same route; will be ignored
CESCO's answer renders first the component AppShell
then one of the components inside Switch
. But these components are NOT going to render inside AppShell
, they will NOT be children of AppShell
.
In v4 to wrap components you don't put anymore your Route
s inside another Route
, you put your Route
s directly inside a component.
I.E : for the wrapper instead of <Route component={Layout}>
you directly use <Layout>
.
Full code :
<Router> <Layout> <Route path='/abc' component={ABC} /> <Route path='/xyz' component={XYZ} /> </Layout> </Router>
The change is probably explained by the idea to make React Router v4 to be pure React so you only use React elements like with any other React element.
EDIT : I removed the Switch
component as it's not useful here. See when it's useful here.
You need to use the switch component to nesting to work nice. Also, see this 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>
And version-4 components do not take children, instead, you should use the render prop.
<Router> <Route render={(props)=>{ return <div>Whatever</div>}> </Route> </Router>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With