前端项目实战叁佰贰拾陆material ui-app Bar-底部应用栏
import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { createStyles, Theme, withStyles, WithStyles } from '@material-ui/core/styles'; import AppBar from '@material-ui/core/AppBar'; import CssBaseline from '@material-ui/core/CssBaseline'; import Toolbar from '@material-ui/core/Toolbar'; import Typography from '@material-ui/core/Typography'; import IconButton from '@material-ui/core/IconButton'; import Paper from '@material-ui/core/Paper'; import Fab from '@material-ui/core/Fab'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; import ListItemText from '@material-ui/core/ListItemText'; import ListSubheader from '@material-ui/core/ListSubheader'; import Avatar from '@material-ui/core/Avatar'; import MenuIcon from '@material-ui/icons/Menu'; import AddIcon from '@material-ui/icons/Add'; import SearchIcon from '@material-ui/icons/Search'; import MoreIcon from '@material-ui/icons/MoreVert'; const styles = (theme: Theme) => createStyles({ text: { paddingTop: theme.spacing.unit * 2, paddingLeft: theme.spacing.unit * 2, paddingRight: theme.spacing.unit * 2, }, paper: { paddingBottom: 50, }, list: { marginBottom: theme.spacing.unit * 2, }, subHeader: { backgroundColor: theme.palette.background.paper, }, appBar: { top: 'auto', bottom: 0, }, toolbar: { alignItems: 'center', justifyContent: 'space-between', }, fabButton: { position: 'absolute', zIndex: 1, top: -30, left: 0, right: 0, margin: '0 auto', }, }); const messages = [ { id: 1, primary: 'Brunch this week?', secondary: "I'll be in the neighbourhood this week. Let's grab a bite to eat", person: '/static/images/avatar/5.jpg', }, { id: 2, primary: 'Birthday Gift', secondary: `Do you have a suggestion for a good present for John on his work anniversary. I am really confused & would love your thoughts on it.`, person: '/static/images/avatar/1.jpg', }, { id: 3, primary: 'Recipe to try', secondary: 'I am try out this new BBQ recipe, I think this might be amazing', person: '/static/images/avatar/2.jpg', }, { id: 4, primary: 'Yes!', secondary: 'I have the tickets to the ReactConf for this year.', person: '/static/images/avatar/3.jpg', }, { id: 5, primary: "Doctor's Appointment", secondary: 'My appointment for the doctor was rescheduled for next Saturday.', person: '/static/images/avatar/4.jpg', }, { id: 6, primary: 'Discussion', secondary: `Menus that are generated by the bottom app bar (such as a bottom navigation drawer or overflow menu) open as bottom sheets at a higher elevation than the bar.`, person: '/static/images/avatar/5.jpg', }, { id: 7, primary: 'Summer BBQ', secondary: `Who wants to have a cookout this weekend? I just got some furniture for my backyard and would love to fire up the grill.`, person: '/static/images/avatar/1.jpg', }, ]; export interface Props extends WithStyles<typeof styles> {} function BottomAppBar(props: Props) { const { classes } = props; return ( <React.Fragment> <CssBaseline /> <Paper square className={classes.paper}> <Typography className={classes.text} variant="h5" gutterBottom> Inbox </Typography> <List className={classes.list}> {messages.map(({ id, primary, secondary, person }) => ( <Fragment key={id}> {id === 1 && <ListSubheader className={classes.subHeader}>Today</ListSubheader>} {id === 3 && <ListSubheader className={classes.subHeader}>Yesterday</ListSubheader>} <ListItem button> <Avatar alt="Profile Picture" src={person} /> <ListItemText primary={primary} secondary={secondary} /> </ListItem> </Fragment> ))} </List> </Paper> <AppBar position="fixed" color="primary" className={classes.appBar}> <Toolbar className={classes.toolbar}> <IconButton color="inherit" aria-label="Open drawer"> <MenuIcon /> </IconButton> <Fab color="secondary" aria-label="Add" className={classes.fabButton}> <AddIcon /> </Fab> <div> <IconButton color="inherit"> <SearchIcon /> </IconButton> <IconButton color="inherit"> <MoreIcon /> </IconButton> </div> </Toolbar> </AppBar> </React.Fragment> ); } BottomAppBar.propTypes = { classes: PropTypes.object.isRequired, } as any; export default withStyles(styles)(BottomAppBar);
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南