Created
January 22, 2017 11:05
-
-
Save MiradorOne/33be59d4ab597f2679e83d68e1b63842 to your computer and use it in GitHub Desktop.
React Router - multiple components per page
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// think of it outside the context of the router, if you had pluggable | |
// portions of your `render`, you might do it like this | |
<App children={{main: <Users/>, sidebar: <UsersSidebar/>}}/> | |
// So with the router it looks like this: | |
const routes = ( | |
<Route component={App}> | |
<Route path="groups" components={{main: Groups, sidebar: GroupsSidebar}}/> | |
<Route path="users" components={{main: Users, sidebar: UsersSidebar}}> | |
<Route path="users/:userId" component={Profile}/> | |
</Route> | |
</Route> | |
) | |
class App extends React.Component { | |
render () { | |
const { main, sidebar } = this.props; | |
return ( | |
<div> | |
<div className="Main"> | |
{main} | |
</div> | |
<div className="Sidebar"> | |
{sidebar} | |
</div> | |
</div> | |
) | |
} | |
} | |
class Users extends React.Component { | |
render () { | |
return ( | |
<div> | |
{/* if at "/users/123" `children` will be <Profile> */} | |
{/* UsersSidebar will also get <Profile> as this.props.children, | |
so its a little weird, but you can decide which one wants | |
to continue with the nesting */} | |
{this.props.children} | |
</div> | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment