'Add a unique ID to each menu item in Material UI TablePagination
Is it possible to add a unique ID to each menu item that is rendered using <TablePagination >
?
I want to add a unique ID (for example: id="menu_item_0"
, id="menu_item_1"
& id="menu_item_2"
) to these (10, 25, 100) menu items, which are basically <li>
tags.
Here's the code.
import * as React from "react";
import Paper from "@mui/material/Paper";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
import TableContainer from "@mui/material/TableContainer";
import TableHead from "@mui/material/TableHead";
import TablePagination from "@mui/material/TablePagination";
import TableRow from "@mui/material/TableRow";
const columns = [
{ id: "name", label: "Name", minWidth: 170 },
{ id: "code", label: "ISO\u00a0Code", minWidth: 100 },
{
id: "population",
label: "Population",
minWidth: 170,
align: "right",
format: (value) => value.toLocaleString("en-US")
}
];
function createData(name, code, population, size) {
const density = population / size;
return { name, code, population, size, density };
}
const rows = [createData("India", "IN", 1324171354, 3287263)];
export default function StickyHeadTable() {
const [page, setPage] = React.useState(0);
const [rowsPerPage, setRowsPerPage] = React.useState(10);
const handleChangePage = (event, newPage) => {
setPage(newPage);
};
const handleChangeRowsPerPage = (event) => {
setRowsPerPage(+event.target.value);
setPage(0);
};
return (
<Paper sx={{ width: "100%", overflow: "hidden" }}>
<TableContainer sx={{ maxHeight: 440 }}>
<Table stickyHeader aria-label="sticky table">
<TableHead>
<TableRow>
{columns.map((column) => (
<TableCell
key={column.id}
align={column.align}
style={{ minWidth: column.minWidth }}
>
{column.label}
</TableCell>
))}
</TableRow>
</TableHead>
<TableBody>
{rows
.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
.map((row) => {
return (
<TableRow hover role="checkbox" tabIndex={-1} key={row.code}>
{columns.map((column) => {
const value = row[column.id];
return (
<TableCell key={column.id} align={column.align}>
{column.format && typeof value === "number"
? column.format(value)
: value}
</TableCell>
);
})}
</TableRow>
);
})}
</TableBody>
</Table>
</TableContainer>
<TablePagination
rowsPerPageOptions={[10, 25, 100]}
component="div"
count={rows.length}
rowsPerPage={rowsPerPage}
page={page}
onPageChange={handleChangePage}
onRowsPerPageChange={handleChangeRowsPerPage}
/>
</Paper>
);
}
Solution 1:[1]
label
and value
could be passed separately to rowsPerPageOptions
rowsPerPageOptions={[
{
value: 10,
label: <span id="menu_item_0">10</span>
},
{
value: 25,
label: <span id="menu_item_1">25</span>
},
{
value: 100,
label: <span id="menu_item_2">100</span>
},
]}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Kundan |