React-MaterialUI:在应用栏->标签->标签

时间:2020-05-22 05:28:08

标签: css reactjs material-ui material-design

在我的React应用程序中,我有一个导航栏,其中有多个选项卡,这些选项卡是使用Marerial UI的AppBar,选项卡和选项卡组件(按顺序)创建的,如下所示:

function associatedProps(index) {
    return {
        id: `nav-tab-${index}`,
        'aria-controls': `nav-tabpanel-${index}`
    };
}

function LinkTab(props) {
    const history = useHistory();
    const route = props.route;
    console.log(props);
    return (
        <>
        <Tab
            component="a"
            onClick={(event) => {
                event.preventDefault();
                history.push(route)
            }}
            {...props}
        />
        </>
    );
}

const useStyles = makeStyles((theme) => ({
    root: {
        flexGrow: 1,
        backgroundColor: theme.palette.background.paper,
        height: theme.navBarHeight
    },
    tabIndicator: {
        backgroundColor: PRIMARY_RED.default
    },
    tabBar: {
      top: '80px'
    }
}));

export default function NavTabs() {
    const classes = useStyles();
    const [value, setValue] = React.useState(0);

    const handleChange = (event, newValue) => {
        setValue(newValue);
    };

    return (
        <div className={classes.root}>
            <AppBar position="fixed" className={classes.tabBar}>
                <Tabs
                    variant=""
                    classes={{indicator: classes.tabIndicator}}
                    value={value}
                    onChange={handleChange}
                    aria-label="nav tabs example"
                >
                    <LinkTab {...PRIMARY_NAVIGATION.MY_LIST} {...associatedProps(0)} />
                    <LinkTab {...PRIMARY_NAVIGATION.MY_REQUESTS} {...associatedProps(1)} />
                    <LinkTab {...PRIMARY_NAVIGATION.REPORT} {...associatedProps(2)} />
                </Tabs>
            </AppBar>
        </div>
    );
}

现在在此设置中,我希望我的 REPORT 标签位于应用栏的右侧。我在文档中没有看到任何CSS规则或Prop,可以在这里为我提供帮助。

请提出在当前设置中该如何实现的建议。

2 个答案:

答案 0 :(得分:1)

您应该像这样为Tabs设置一个类:

const useStyles = makeStyles((theme) => ({
    tabs: {
      '&:last-child': {
        position: 'absolute',
        right: '0'
      }
    }
}));

export default function NavTabs() {
    ...
    return (
        <div className={classes.root}>
            <AppBar position="fixed" className={classes.tabBar}>
                <Tabs
                    variant=""
                    classes={classes.tabs}
                    value={value}
                    onChange={handleChange}
                    aria-label="nav tabs example"
                >
                    <LinkTab {...PRIMARY_NAVIGATION.MY_LIST} {...associatedProps(0)} />
                    <LinkTab {...PRIMARY_NAVIGATION.MY_REQUESTS} {...associatedProps(1)} />
                    <LinkTab {...PRIMARY_NAVIGATION.REPORT} {...associatedProps(2)} />
                </Tabs>
            </AppBar>
        </div>
    );

答案 1 :(得分:1)

制表符不提供使特定项目与开始或结束对齐的属性。但是您可以利用CSS来达到目的。

在要右对齐的项目上添加className并在其上定义marginLeft属性

const useStyles = makeStyles((theme) => ({
    root: {
        flexGrow: 1,
        backgroundColor: theme.palette.background.paper,
        height: theme.navBarHeight
    },
    tabIndicator: {
        backgroundColor: PRIMARY_RED.default
    },
    tabBar: {
      top: '80px'
    },
    rightAlign: {
       marginLeft: 'auto',
    }
}));

export default function NavTabs() {
    const classes = useStyles();
    const [value, setValue] = React.useState(0);

    const handleChange = (event, newValue) => {
        setValue(newValue);
    };

    return (
        <div className={classes.root}>
            <AppBar position="fixed" className={classes.tabBar}>
                <Tabs
                    variant=""
                    classes={{indicator: classes.tabIndicator}}
                    value={value}
                    onChange={handleChange}
                    aria-label="nav tabs example"
                >
                    <LinkTab {...PRIMARY_NAVIGATION.MY_LIST} {...associatedProps(0)} />
                    <LinkTab {...PRIMARY_NAVIGATION.MY_REQUESTS} {...associatedProps(1)} />
                    <LinkTab {...PRIMARY_NAVIGATION.REPORT} {...associatedProps(2)} className={classes.rightAlign}/>
                </Tabs>
            </AppBar>
        </div>
    );
}

Sample working demo