Подтвердить что ты не робот

Как добавить несколько элементов в компонент Material-UI AppBar?

Я хочу иметь несколько компонентов FlatButton в Material-UI AppBar и сохранять стиль, поэтому он выглядит так (с несколькими кнопками).

Однако, когда я пытаюсь добавить несколько компонентов FlatButton, я получаю сообщение о том, что мне нужно обернуть их в охватывающий тег. Я использовал как span, так и div с такими же плохими результатами.

введите описание изображения здесь

Есть ли способ сохранить стиль AppBar во вложенном теге или по-другому добавить несколько элементов в AppBar, чтобы получить желаемый эффект?

4b9b3361

Ответ 1

iconRightElement должен быть единственным элементом, поэтому вам просто нужно обернуть ваши кнопки в div следующим образом:

render() {
  const buttonStyle = {
    backgroundColor: 'transparent',
    color: 'white'
  };

  const rightButtons = (
    <div>
      <FlatButton label="About" style={buttonStyle} />
      <FlatButton label="Home" style={buttonStyle} />
    </div>
  );

  return (
    <AppBar title="React seed" iconRightElement={rightButtons} />
  );
}

Ответ 2

Я столкнулся с той же проблемой и решил ее использовать с помощью дочерних элементов AppBar. Возможно, вам придется исправить стиль кнопок, чтобы они выглядели идентично оригинальным.

render() {
  var buttonStyle = {
    backgroundColor: 'transparent',
    color: 'white'
  };

  return (
    <AppBar title="React seed">
      <FlatButton label="About" style={buttonStyle} />
      <FlatButton label="Home" style={buttonStyle} />
    </AppBar>
  )}

Ответ 3

Вы должны использовать getStyles из material-ui/AppBar/AppBar и передать стиль дочернему компоненту (FlatButton, IconMenu,...). Чтобы использовать getStyles, вам нужно получить muiTheme в контексте с объявлением contextTypes.

ПРИМЕЧАНИЕ. Если вы хотите использовать как FlatButton, так и IconMenu, вам нужно настроить верхнюю позицию FlatButton из-за различия размеров между FlatButton и IconMenu. (шаблон hasIconMenu == true)

import React             from 'react';
import AppBar            from 'material-ui/AppBar';
import { getStyles }     from 'material-ui/AppBar/AppBar';
import MenuItem          from 'material-ui/MenuItem';

class App extends React.Component {
  static get contextTypes() {
    return { muiTheme: React.PropTypes.object.isRequired };
  }
  render() {
    const styles = getStyles(this.props, this.context);
    const { button: { iconButtonSize }} = this.context.muiTheme;
    const { appBar } = this.context.muiTheme;
    const hasIconMenu = false;
    let iconMenu = null;
    if (hasIconMenu) {
      styles.flatButton.top = -styles.flatButton.marginTop;
      styles.flatButton.marginTop = 0;
      iconMenu = (
        <IconMenu
          iconStyle={styles.iconButtonIconStyle}
          iconButtonElement={<IconButton><MoreVertIcon /></IconButton>}
          targetOrigin={{horizontal: 'right', vertical: 'top'}}
          anchorOrigin={{horizontal: 'right', vertical: 'top'}}
        >
          <MenuItem primaryText="Refresh" />
          <MenuItem primaryText="Help" />
          <MenuItem primaryText="Sign out" />
        </IconMenu>
      );
    }
    const rightIcons = (
      <div>
        <FlatButton label="My Channels" style={styles.flatButton} />
        <FlatButton label="Favorite" style={styles.flatButton} />
        <FlatButton label="Login" style={styles.flatButton} />
        {iconMenu}
      </div>
    );

    return (
      <div>
        <AppBar
          title="Title"
          iconElementRight={rightIcons}
        />
        {this.props.children}
      </div>
    );
  }

Ответ 4

Вы должны сделать это

render() {
    const buttonStyle = {
        backgroundColor: 'transparent',
        color: 'white'
    };

    return (
        <AppBar title="React seed" iconRightElement={
            <FlatButton label="About" style={buttonStyle} />
            <FlatButton label="Home" style={buttonStyle} />
         } />
    )
}