javascript - 如何在 Material UI 表格分页中更改纸张样式
问题描述
我正在尝试更改列表的背景颜色,其中包含 MUI TablePagination 中的行数。
<TablePagination
style={{ color: "#b5b8c4", fontSize: "14px" }}
classes={{selectIcon: classes.select, paper: classes.selectDropdown}}
rowsPerPageOptions={[5, 10, 20]}
component="div"
count={data.length}
rowsPerPage={rowsPerPage}
page={page}
backIconButtonProps={{
"aria-label": "Previous Page",
style: {color: page===0?"#b5b8c4":"#7cb5ec" },
autoid: "pagination-button-next-collector",
}}
nextIconButtonProps={{
"aria-label": "Next Page",
style: {color: "#7cb5ec"},
autoid: "pagination-button-previous-collector",
}}
onChangePage={this.handleChangePage}
onChangeRowsPerPage={this.handleChangeRowsPerPage}
autoid="invoice-table-pagination-collector"
/>
的内容selectDropdown
是,
selectDropdown: {color: "#fff", backgroundColor: "#1b1f38", },
但我收到一个错误
Warning: Material-UI: the key `paper` provided to the classes property is not implemented in TablePagination.
You can only override one of the following: root,toolbar,spacer,caption,selectRoot,select,selectIcon,input,menuItem,actions.
通过更改paper
为`menuItem,我可以获得类似但不令人满意的结果。
这在顶部和底部有空格,并且焦点项目也不能更改。
提前致谢。
解决方案
下面的示例是文档中自定义分页操作示例的副本,但您的问题中指出了样式更改。
我对演示所做的更改是为 Paper 背景添加样式和MenuItem
悬停效果样式(否则悬停不可见):
const useStyles2 = makeStyles({
selectDropdown: { color: "#fff", backgroundColor: "#1b1f38" },
menuItem: {
"&:hover": {
backgroundColor: "#3b3f58"
}
}
});
要将您的selectDropdown
课程应用于菜单 Paper,请MenuProps
使用SelectProps
. 该menuItem
样式可以更直接地应用(如下所示)。
<TablePagination
SelectProps={{
MenuProps: { classes: { paper: classes.selectDropdown } }
}}
classes={{ menuItem: classes.menuItem }}
...
/>
与原始文档演示相比,另一个更改是我native: true
从SelectProps
(此自定义样式方法均不适用于本机选择,并且您问题中的示例未使用本机选择)中删除。
这是沙盒的完整代码:
import React from "react";
import PropTypes from "prop-types";
import { makeStyles, useTheme } from "@material-ui/core/styles";
import Table from "@material-ui/core/Table";
import TableBody from "@material-ui/core/TableBody";
import TableCell from "@material-ui/core/TableCell";
import TableContainer from "@material-ui/core/TableContainer";
import TableFooter from "@material-ui/core/TableFooter";
import TablePagination from "@material-ui/core/TablePagination";
import TableRow from "@material-ui/core/TableRow";
import Paper from "@material-ui/core/Paper";
import IconButton from "@material-ui/core/IconButton";
import FirstPageIcon from "@material-ui/icons/FirstPage";
import KeyboardArrowLeft from "@material-ui/icons/KeyboardArrowLeft";
import KeyboardArrowRight from "@material-ui/icons/KeyboardArrowRight";
import LastPageIcon from "@material-ui/icons/LastPage";
const useStyles1 = makeStyles(theme => ({
root: {
flexShrink: 0,
marginLeft: theme.spacing(2.5)
}
}));
function TablePaginationActions(props) {
const classes = useStyles1();
const theme = useTheme();
const { count, page, rowsPerPage, onChangePage } = props;
const handleFirstPageButtonClick = event => {
onChangePage(event, 0);
};
const handleBackButtonClick = event => {
onChangePage(event, page - 1);
};
const handleNextButtonClick = event => {
onChangePage(event, page + 1);
};
const handleLastPageButtonClick = event => {
onChangePage(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
};
return (
<div className={classes.root}>
<IconButton
onClick={handleFirstPageButtonClick}
disabled={page === 0}
aria-label="first page"
>
{theme.direction === "rtl" ? <LastPageIcon /> : <FirstPageIcon />}
</IconButton>
<IconButton
onClick={handleBackButtonClick}
disabled={page === 0}
aria-label="previous page"
>
{theme.direction === "rtl" ? (
<KeyboardArrowRight />
) : (
<KeyboardArrowLeft />
)}
</IconButton>
<IconButton
onClick={handleNextButtonClick}
disabled={page >= Math.ceil(count / rowsPerPage) - 1}
aria-label="next page"
>
{theme.direction === "rtl" ? (
<KeyboardArrowLeft />
) : (
<KeyboardArrowRight />
)}
</IconButton>
<IconButton
onClick={handleLastPageButtonClick}
disabled={page >= Math.ceil(count / rowsPerPage) - 1}
aria-label="last page"
>
{theme.direction === "rtl" ? <FirstPageIcon /> : <LastPageIcon />}
</IconButton>
</div>
);
}
TablePaginationActions.propTypes = {
count: PropTypes.number.isRequired,
onChangePage: PropTypes.func.isRequired,
page: PropTypes.number.isRequired,
rowsPerPage: PropTypes.number.isRequired
};
function createData(name, calories, fat) {
return { name, calories, fat };
}
const rows = [
createData("Cupcake", 305, 3.7),
createData("Donut", 452, 25.0),
createData("Eclair", 262, 16.0),
createData("Frozen yoghurt", 159, 6.0),
createData("Gingerbread", 356, 16.0),
createData("Honeycomb", 408, 3.2),
createData("Ice cream sandwich", 237, 9.0),
createData("Jelly Bean", 375, 0.0),
createData("KitKat", 518, 26.0),
createData("Lollipop", 392, 0.2),
createData("Marshmallow", 318, 0),
createData("Nougat", 360, 19.0),
createData("Oreo", 437, 18.0)
].sort((a, b) => (a.calories < b.calories ? -1 : 1));
const useStyles2 = makeStyles({
table: {
minWidth: 500
},
selectDropdown: { color: "#fff", backgroundColor: "#1b1f38" },
menuItem: {
"&:hover": {
backgroundColor: "#3b3f58"
}
}
});
export default function CustomPaginationActionsTable() {
const classes = useStyles2();
const [page, setPage] = React.useState(0);
const [rowsPerPage, setRowsPerPage] = React.useState(5);
const emptyRows =
rowsPerPage - Math.min(rowsPerPage, rows.length - page * rowsPerPage);
const handleChangePage = (event, newPage) => {
setPage(newPage);
};
const handleChangeRowsPerPage = event => {
setRowsPerPage(parseInt(event.target.value, 10));
setPage(0);
};
return (
<TableContainer component={Paper}>
<Table className={classes.table} aria-label="custom pagination table">
<TableBody>
{(rowsPerPage > 0
? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
: rows
).map(row => (
<TableRow key={row.name}>
<TableCell component="th" scope="row">
{row.name}
</TableCell>
<TableCell style={{ width: 160 }} align="right">
{row.calories}
</TableCell>
<TableCell style={{ width: 160 }} align="right">
{row.fat}
</TableCell>
</TableRow>
))}
{emptyRows > 0 && (
<TableRow style={{ height: 53 * emptyRows }}>
<TableCell colSpan={6} />
</TableRow>
)}
</TableBody>
<TableFooter>
<TableRow>
<TablePagination
rowsPerPageOptions={[5, 10, 25, { label: "All", value: -1 }]}
colSpan={3}
count={rows.length}
rowsPerPage={rowsPerPage}
page={page}
SelectProps={{
inputProps: { "aria-label": "rows per page" },
MenuProps: { classes: { paper: classes.selectDropdown } }
}}
classes={{ menuItem: classes.menuItem }}
onChangePage={handleChangePage}
onChangeRowsPerPage={handleChangeRowsPerPage}
ActionsComponent={TablePaginationActions}
/>
</TableRow>
</TableFooter>
</Table>
</TableContainer>
);
}
相关(也为菜单文件设置样式)答案:(material-ui) Apply max-height to <Select> children
相关文档:
- TablePagination SelectProps:https ://material-ui.com/api/table-pagination/#props
- 选择 MenuProps:https ://material-ui.com/api/select/#props
- 菜单纸 CSS 类:https ://material-ui.com/api/menu/#css
推荐阅读
- java - 许多连接用于获取一条记录 VS 一个连接用于使用 java 获取 Mysql 中的所有记录
- php - 提交后数据库表中的值没有更新
- php - 如何在 cakephp 3 中使用 validationDefault 方法
- sql - Oracle - 插入数据时出现“值太大”错误
- visual-studio-code - 如何创建 VS Code 扩展以通过 REST API 显示和更新数据
- android - Android Studio 没有正确加载预览布局
- python - 为 Python 创建 AWS 部署包
- php - 编写嵌套 PHP for 循环的更短方法
- javascript - 如何同步 slideToggle() 元素,以便它们一起展开/折叠,而不管当前状态如何?
- python - 在 matplotlib 中绘制具有不同颜色的图形