如何使用 material-ui 在工具栏内拥有全高标签?

IT技术 reactjs material-ui
2021-05-01 16:35:06

我试图有一个固定的标题,右侧应该是选项卡。<Toolbar />组件负责块的响应,但不允许如此容易地拉伸选项卡。

https://codesandbox.io/s/jv8v6vwqpv

1个回答

问题是Toolbar响应性地改变了它的高度,而TabsTab组件没有(Tabsmin-height在其root类中设置了48px ,Tab在其类中设置了高度root)。

幸运的是,行为Toolbar使用在主题混合中可用,因此您可以创建也使用此逻辑的类:

const styles = theme => ({
  fullHeight: {
    ...theme.mixins.toolbar,
  },
});

这将创建一个与Toolbar组件中使用的响应高度逻辑相同的类使用withStyles,你可以让你的组件可以访问这个类:

import { withStyles } from "material-ui/styles";

// ...

export default withStyles(styles)(Header);

这将添加一个classesprops,它是一个对象,其中包含提供给 的对象中定义的每个类的字符串属性withStyles您可以通过覆盖它们的来将应用于Tabs组件和每个Tab组件,以确保它们填充AppBar

  render() {
    const { classes } = this.props;
    return (
      <AppBar>
        <Toolbar>
          <Grid container alignItems="center" justify="space-between">
            <Grid item>
              <Typography color="inherit" variant="title">
                BackTube
              </Typography>
            </Grid>
            <Grid item>
              <Tabs classes={{ root: classes.fullHeight }} onChange={this.changeTab} value={this.state.currentTab}>
                <Tab classes={{ root: classes.fullHeight }} icon={<Magnify />} value="search" />
                <Tab classes={{ root: classes.fullHeight }} icon={<FormatListBulleted />} value="lists" />
                <Tab classes={{ root: classes.fullHeight }} icon={<Settings />} value="settings" />
              </Tabs>
            </Grid>
          </Grid>
        </Toolbar>
      </AppBar>
    );

这是您的代码的修改版本,其中包含上述更改。