Material UI Menu using routes
Starting with Material-UI 1.0, the new syntax is:
<MenuItem
component={Link}
// the 'to' prop (and any other props not recognized by MenuItem itself)
// will be passed down to the Link component
to="/profile"
>
Profile
</MenuItem>
(Note: this example doesn't include an icon. There is a new ListItemIcon
component for that.)
another long overdue update:
containerElement
prop is not supported anymore, use component
prop instead.
Check out the document here.
2016 December Edit: the linkButton
prop is deprecated, you will get a warning:
Warning: Unknown props `linkButton` on <a> tag.
So simply remove the prop:
<MenuItem
containerElement={<Link to="/profile" />}
primaryText="Profile"
leftIcon={
<FontIcon className="material-icons">people</FontIcon>
}
/>
Here's an Example Repo, and the Live Demo Here.
Original answer:
Just wanted to point out that if you're using react-router, you might want to use <Link to="/some/page" />
rather than the <a>
tag.
To do this, you need to use the containerElement
prop
<MenuItem
linkButton
containerElement={<Link to="/profile" />}
primaryText="Profile"
leftIcon={
<FontIcon className="material-icons">people</FontIcon>
}
/>
(the ={true}
can be omitted if you're only passing true
,
in other words, <MenuItem linkButton />
is same as <MenuItem linkButton={true} />
)
The containerElement
and linkButton
props is actually documented in the buttons section, but you can use it in MenuItem
as well.
None of the existing answers (of September 2018) worked for me with react 16.4.2 and react-router 4.2.2, so this was my solution:
<Link to='/notifications' style={{ textDecoration: 'none' }}>
<MenuItem>Notifications</MenuItem>
</Link>
As you can see, the MenuItem component is surrounded by the Link component, and I added a style textDecoration: 'none'
not to have the item underlined.
You can set the linkButtton
prop on MenuItem
to generate a link, then also add an href
.
<MenuItem linkButton={true} href="link/to/some/page" primaryText="Sample Link" />