Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Material UI Menu using routes

I am toying with material-ui. I implemented LeftNav using routes, but I could not find a way to get IconMenu, or Menu working with links or routes. Anyone can point me to a good source / tutorial? The documentation falls short, and both components seem not to support 'menuItems' as property as LeftNav does.

like image 939
gattermeier Avatar asked Aug 19 '15 22:08

gattermeier


4 Answers

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.

like image 100
DaxChen Avatar answered Oct 22 '22 13:10

DaxChen


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.)

like image 44
Matt Browne Avatar answered Oct 22 '22 12:10

Matt Browne


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" />
like image 14
Hai Nguyen Avatar answered Oct 22 '22 11:10

Hai Nguyen


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.

like image 11
Simon Avatar answered Oct 22 '22 13:10

Simon