web-dev-qa-db-fra.com

Comment ajouter plusieurs éléments au composant Material-UI AppBar?

Je veux avoir plusieurs composants FlatButton dans l'AppBar Material-UI et conserver le style, donc ça ressemble à ça (avec plusieurs boutons).

Cependant, lorsque j'essaie d'ajouter plusieurs composants FlatButton, j'obtiens une erreur indiquant que je dois les envelopper dans une balise englobante. J'ai utilisé à la fois un span et un div avec les mêmes mauvais résultats.

enter image description here

Existe-t-il un moyen de conserver le style de l'AppBar dans la balise englobante ou une manière différente d'ajouter plusieurs éléments à l'AppBar lui-même pour obtenir l'effet souhaité?

20
Joe Martella

Le iconRightElement doit être un élément unique, vous avez donc juste besoin d'encapsuler vos boutons dans une div comme ceci:

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} />
  );
}
10
Branon Barrett

J'ai rencontré le même problème et l'ai résolu en utilisant des enfants AppBar. Vous devrez peut-être corriger le style des boutons pour les rendre identiques à ceux d'origine

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

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

Vous devez utiliser getStyles of material-ui/AppBar/AppBar et passez le style au composant enfant (FlatButton, IconMenu, ...). Pour utiliser getStyles, vous devez obtenir muiTheme en contexte avec la déclaration de contextTypes.

REMARQUE: Si vous souhaitez utiliser FlatButton et IconMenu, vous devez ajuster la position supérieure de FlatButton en raison de la différence de taille entre FlatButton et IconMenu. (hasIconMenu == true modèle)

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>
    );
  }
2
kumabook