Меню пользовательского интерфейса с использованием маршрутов

Я играю с материалом-ui. Я реализовал LeftNav с помощью маршрутов, но я не смог найти способ получить IconMenu или меню со ссылками или маршрутами. Любой может указать мне хороший источник/учебник? Документация не подходит, и оба компонента, похоже, не поддерживают "menuItems" как свойство LeftNav.

Ответы

Ответ 1

2016 Декабрь Редактировать: linkButton прокрутка устарела, вы получите предупреждение:

Warning: Unknown props `linkButton` on <a> tag.

Поэтому просто удалите опору:

<MenuItem
  containerElement={<Link to="/profile" />}
  primaryText="Profile"
  leftIcon={
    <FontIcon className="material-icons">people</FontIcon>
  }
/>

Здесь пример Repo и Live Demo Here.


Оригинальный ответ:

Просто хочу отметить, что если вы используете реактивный маршрутизатор, вы можете использовать <Link to="/some/page" />, а не тег <a>.

Для этого вам нужно использовать containerElement prop

<MenuItem
  linkButton
  containerElement={<Link to="/profile" />}
  primaryText="Profile"
  leftIcon={
    <FontIcon className="material-icons">people</FontIcon>
  }
/>

(={true} может быть опущен, если вы проходите только true,  другими словами, <MenuItem linkButton /> совпадает с <MenuItem linkButton={true} />)

Реквизиты containerElement и linkButton фактически документированы в разделе кнопок, но вы можете использовать его и в MenuItem.

Ответ 2

Вы можете установить linkButtton prop на MenuItem для создания ссылки, а затем добавить href.

<MenuItem linkButton={true} href="link/to/some/page" primaryText="Sample Link" />

Ответ 3

Утверждение linkButton of EnhancedButton устарело. LinkButton больше не требуется, если предоставляется свойство href. Он будет удален с помощью v0.16.0.

<MenuItem onTouchTap={this.handleClose} href="/link/data">Link Item</MenuItem>

Работает нормально

Ответ 4

Начиная с Material-UI 1.0, новый синтаксис:

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

(Примечание: в этом примере нет значка. Для этого есть новый компонент ListItemIcon.)

Ответ 5

Ни один из существующих ответов (от сентября 2018 года) не работал для меня с реакцией 16.4.2 и реакцией-маршрутизатором 4.2.2, так что это было мое решение:

<Link to='/notifications' style={{ textDecoration: 'none' }}>
   <MenuItem>Notifications</MenuItem>
</Link>

Как видите, компонент MenuItem окружен компонентом Link, и я добавил стиль textDecoration: None, чтобы элемент не был подчеркнут.

Ответ 6

onTouchTap не работает для меня, я должен использовать onClick см. пример ниже

  <MenuItem 
    onClick={this.logout}
    containerElement={<Link to="/" />}
    primaryText="Sign out"
    rightIcon={
      <b style={style.rightIcon}>
        <img
          className="menu-img"
          src="img/app/logout.png"
          alt="logout"
        />
      </b>
    }
  />

надеюсь, это поможет и другим

Ответ 7

Вот моя реализация, которая выглядит точно так же, как на материале-ui официального сайта. Компонент, который вы можете использовать, включает AppBar, Drawer и ListItem. SelectableList может быть реализован как let SelectableList = MakeSelectable(List).

<div>
  <AppBar 
    onLeftIconButtonTouchTap={this.handleLeftIconButtonTouchTap}
    title={title}
    showMenuIconButton={true}
    zDepth={0}
  />
    <Drawer 
      open={this.state.open} 
      docked={true} 
      onRequestChange={(open, reason) => {
        this.setState({open:false})
      }}
    >
      <AppBar title={title} />
      <SelectableList
        value={location.pathname}
        onChange={this.handleRequestChangeList}
       >
        <Subheader>Selectable Contacts</Subheader>
        <ListItem
          value={"link1"}
          primaryText="Link1"
        />
        <ListItem
          value={"link2"}
          primaryText="Link2"
        />
      </SelectableList>
    </Drawer>
 </div>

Ответ 8

Я не мог сделать работу containerElement в Safari в iOS с react-router. Я использую 0.17.2 для пользовательского интерфейса материала и [email protected], и здесь работает работа со мной:

  <MenuItem
    onTouchTap={() => {
      this._yourMethod()
      browserHistory.push('/howItWorks')
    }}
    primaryText="Menu Link"
  />