Как добавить несколько элементов в компонент Material-UI AppBar?
Я хочу иметь несколько компонентов FlatButton в Material-UI AppBar и сохранять стиль, поэтому он выглядит так (с несколькими кнопками).
![]()
Однако, когда я пытаюсь добавить несколько компонентов FlatButton, я получаю сообщение о том, что мне нужно обернуть их в охватывающий тег. Я использовал как span, так и div с такими же плохими результатами.
![введите описание изображения здесь]()
Есть ли способ сохранить стиль AppBar во вложенном теге или по-другому добавить несколько элементов в AppBar, чтобы получить желаемый эффект?
Ответы
Ответ 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} />
} />
)
}