私は their site で使用しているもののように見えるmaterial-uiでシンプルなnavbarを作成しようとしています。これは、複製を試みるために私が書いたコードです。
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)
問題は、タブが非常に奇妙になっていて、タブをクリックしても何の効果もないことです。スクリーンショット:
どんな助けも大歓迎です。
少なくとも、 意志はそこにある -すべての希望が失われるわけではない!
同じ問題がありました。
結局のところ、それは bug(#773) です。
しかし、あなたは幸運です: このPR はCSSを使用したソリューションを提供します。それ(ちょっと)動作します。これがスクリーンショットです:
ご覧のとおり、見た目が少しsoいので、CSSをいじり続けて、タブを正しい場所に表示することをお勧めします。
注:8か月前、 PRは拒否されました 。どうやら、Tabs
にAppBar
を表示することは優先度が高くないため、現時点で得られるのはハックフィックスソリューションだけです!
プレリリースライブラリを使用することの苦痛!
Kabirの答えは良い出発点だと思うし、AppBar
はツールバーのサブセットなので、<Tabs>
を<ToolbarGroup >
にラップすることもできると思います。
例えば.
iconElementRight={<ToolbarGroup >{myTabs}</ToolbarGroup>}
パーティーに少し遅れましたが、私にとってはうまくいった解決策です。参考までに、これはRailsバックエンドを持つReact/Reduxアプリです。
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>
)
}
次に、ユーザーの認証状態に応じて適切なAppBarを表示する他のロジック。
タブはアプリバーの一部であるとは考えていません。マテリアルスペックは、それらをセカンダリツールバーとして表示します。
CSSハックの他に、タブテキストを分割するためのハックとして HTMLエンティティ を使用できることがわかりました。あなたは付け加えられます
をタブラベルの最初と最後に追加すると、スペースができます。
ラベル文字列は見苦しくなりますが、それほど気にしない場合はかなりうまく機能し、必要なだけスペースを追加することもできます。
更新されたコードは次のとおりです。
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)
スクリーンショット: タブ付きのタブ
React-tap-event-pluginを使用しましたか? https://github.com/callemall/material-ui/issues/288 によると、必要です。