【问题标题】:How to change the paper style in Material UI Table Pagination如何在 Material UI 表格分页中更改纸张样式
【发布时间】:2020-10-13 15:43:37
【问题描述】:

我正在尝试更改列表的背景颜色包含 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,我可以获得类似但不令人满意的结果。

这在顶部和底部都有空格,并且焦点项也无法更改。

提前致谢。

【问题讨论】:

    标签: javascript reactjs react-native material-ui


    【解决方案1】:

    下面的示例是文档中Custom Pagination Actions example 的副本,但您的问题中指出了样式更改。

    我对演示所做的更改是添加您的纸张背景样式和MenuItem 悬停效果的样式(否则悬停不可见):

    const useStyles2 = makeStyles({
      selectDropdown: { color: "#fff", backgroundColor: "#1b1f38" },
      menuItem: {
        "&:hover": {
          backgroundColor: "#3b3f58"
        }
      }
    });
    

    要将selectDropdown 类应用于菜单Paper,请在SelectProps 中使用MenuProps。可以更直接地应用menuItem 样式(均如下所示)。

    <TablePagination
                  SelectProps={{
                    MenuProps: { classes: { paper: classes.selectDropdown } }
                  }}
                  classes={{ menuItem: classes.menuItem }}
                  ...
                />
    

    与原始文档演示相比,另一个变化是我从SelectProps 中删除了native: true(这种自定义样式方法均不适用于本机选择,并且您问题中的示例未使用本机选择)。

    这是沙盒的完整代码:

    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

    相关文档:

    【讨论】:

    • 这段代码运行正常。非常感谢详细的解决方案。 _/\_
    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 2016-05-05
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2021-11-19
    • 2021-06-08
    • 2021-01-03
    相关资源
    最近更新 更多