Création d'une navbar avec material-ui

j'essaye de créer une simple navbar avec material-ui qui ressemble à celle qu'ils utilisent sur leur site. C'est le code que j'ai écrit pour essayer de le reproduire:

import React from 'react'
import {AppBar, Tabs, Tab} from 'material-ui'

class Nav extends React.Component {
  render() {
    return (
      <AppBar title="My App">
        <Tabs>
          <Tab label="Item 1" />
          <Tab label="Item 2" />
          <Tab label="Item 3" />
          <Tab label="Item 4" />
        </Tabs>
      </AppBar>
    )
  }
}

React.render(<Nav />, document.body)

le problème est que les onglets apparaissent très bizarres et cliquer sur les onglets n'a aucun effet. Capture d'écran: enter image description here

Toute aide serait très appréciée.

20
demandé sur saadq 2015-10-08 06:02:43

6 réponses

Dernière Mise À Jour [2018]

le problème doit être corrigé dans la dernière version.

mise à Jour #1 [2016]

Au moins la volonté est là - tout espoir n'est Pas perdu!

Message D'Origine

avait le même problème.

s'avère, c'est un bug (n ° 773).

Mais vous avez de la chance: ce PR fournit une solution en utilisant CSS. Il (un peu) de travaux. Voici une capture d'écran:

enter image description here

comme vous pouvez le voir, il semble un peu moche, donc vous pourriez vouloir continuer à jouer avec le CSS pour obtenir les onglets apparaissent au bon endroit.

NOTE: il y a Huit mois, le PR a été rejeté. Apparemment, l'affichage TabsAppBar n'est pas prioritaire, donc, la hackfix solution est tout que vous avez obtenu pour le moment!

Oh l'agonie de l'aide de pré-libération des bibliothèques!

8
répondu Domi 2018-06-11 17:17:19

je pense que la réponse de Kabir est un bon début et je voudrais aussi envelopper le <Tabs> dans un <ToolbarGroup >AppBar est sous-ensemble de barres d'outils.

e.g.

iconElementRight={<ToolbarGroup >{myTabs}</ToolbarGroup>}

voir: http://www.material-ui.com/#/components/toolbar

2
répondu Aleck Landgraf 2016-09-11 22:37:14

Un peu en retard à la fête, mais une solution qui a fonctionné pour moi. POUR INFO, il s'agit d'une application React/Redux avec un backend de Rails.

import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { Link } from 'react-router'
import AppBar from 'material-ui/AppBar'
import Drawer from 'material-ui/Drawer'
import MenuItem from 'material-ui/MenuItem'
import { getBasename } from '../config/environment'

export default class Navbar extends Component {
  constructor(props) {
    super(props)
    this.state = {open: false}
    this.displayNavbar = this.displayNavbar.bind(this)
  }

  toggleDrawer = () => this.setState({ open: !this.state.open })

  authenticatedNavbar = () => {
    return (
      <div>
        <AppBar
          iconElementRight={
            <MenuItem
              containerElement={<Link to={getBasename() + 'login'} />}
              onTouchTap={() => {this.props.onLogoutClick()}}
              primaryText="Logout"
            />
          }
          onLeftIconButtonTouchTap={() => this.toggleDrawer()}
          title="Your_app"
        />
        <Drawer
          docked={false}
          onRequestChange={(open) => this.setState({open})}
          open={this.state.open}
        >
          <MenuItem
            containerElement={<Link to={getBasename() + 'home'} />}
            onTouchTap={() => { this.toggleDrawer() }}
            primaryText="Home"
          />
          <MenuItem
            containerElement={<Link to={getBasename() + 'some_component'} />}
            onTouchTap={() => { this.toggleDrawer() }}
            primaryText="Some Component"
          />
        </Drawer>
      </div>
    )
  }

  unauthenticatedNavbar = () => {
    return (
      <div>
        <AppBar
          iconElementRight={
            <MenuItem
              containerElement={<Link to={getBasename() + 'login'} />}
              primaryText="Login"
            />
          }
          showMenuIconButton={false}
          title="Your_app"
        />
      </div>
    )
  }

puis une autre logique pour montrer L'AppBar appropriée selon l'état d'authentification de l'utilisateur.

je ne pense pas vraiment que les onglets sont destinés à faire partie de la Barre d'Application. La spécification des matériaux les présente comme une barre d'outils secondaire.

1
répondu J. Parrish 2017-11-27 16:56:29

Avez-vous utilisé l'réagissent-tap-événement-plugin? Selon https://github.com/callemall/material-ui/issues/288 c'est nécessaire.

0
répondu QuestionMark 2016-07-08 14:03:33
entités HTML comme un hack pour partager le texte des onglets. Vous pouvez ajouter &nbsp; Au début et à la fin des étiquettes des onglets et vous avez votre espace.

il rend la chaîne d'étiquettes moche mais si vous ne vous souciez pas beaucoup, il fait le travail assez bien, et il vous permet également d'ajouter autant d'espaces que vous le souhaitez.

Voici le code mis à jour:

import React from 'react'
import {AppBar, Tabs, Tab} from 'material-ui'

class Nav extends React.Component {
  render() {
    return (
      <AppBar title="My App">
        <Tabs>
          <Tab label="&nbsp;Item 1&nbsp;" />
          <Tab label="&nbsp;Item 2&nbsp;" />
          <Tab label="&nbsp;Item 3&nbsp;" />
          <Tab label="&nbsp;Item 4&nbsp;" />
        </Tabs>
      </AppBar>
    )
  }
}

React.render(<Nav />, document.body)

Et capture d'écran: Onglets avec espaces

0
répondu Rares Lucian Oroian 2017-03-10 16:24:37