const { data, loading } = useDemoData({
dataSet: "Commodity",
rowLength: 100,
maxColumns: 10,
});
-> 이건 mui에서 기본으로 제공하는 데이터. 이것을 이용하여 테스트를 편리하게 진행할 수 있었다!
return (
<div style={{ height: 400, width: "100%" }}>
<MuiDataGrid
{...data}
loading={loading}
pageSize={rowsPerPage}
hideFooter
components={{
Toolbar,
}}
/>
</div>
);
-> DataGrid를 하나 만들고, Footer를 삭제해주어야 한다. 이미 DataGrid에는 자동으로 pagination이 있기 때문이다.
-> 삭제했으면, components를 통해 Toolbar를 만들어준다
=> 우리는 이 Toolbar에 pagination을 만들 것이다!
const Toolbar = () => {
const apiRef = useGridApiContext();
const page = useGridSelector(apiRef, gridPageSelector);
const pageCount = useGridSelector(apiRef, gridPageCountSelector);
const handleChangePage = (
event: React.MouseEvent<HTMLButtonElement> | null,
newPage: number
) => {
apiRef.current.setPage(newPage);
};
const handleChangeRowsPerPage = (
event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>
) => {
setRowsPerPage(parseInt(event.target.value, 10));
apiRef.current.setPage(0);
};
return (
<TablePagination
component="div"
color="primary"
count={pageCount * rowsPerPage}
page={page}
onPageChange={handleChangePage}
rowsPerPage={rowsPerPage}
onRowsPerPageChange={handleChangeRowsPerPage}
/>
);
};
-> Selector들에 대한 설명은 전 포스트에 있다.
export const UseGridSelector = () => {
const { data, loading } = useDemoData({
dataSet: "Commodity",
rowLength: 100,
maxColumns: 10,
});
const [rowsPerPage, setRowsPerPage] = React.useState(10);
const Toolbar = () => {
const apiRef = useGridApiContext();
const page = useGridSelector(apiRef, gridPageSelector);
const pageCount = useGridSelector(apiRef, gridPageCountSelector);
const handleChangePage = (
event: React.MouseEvent<HTMLButtonElement> | null,
newPage: number
) => {
apiRef.current.setPage(newPage);
};
const handleChangeRowsPerPage = (
event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>
) => {
setRowsPerPage(parseInt(event.target.value, 10));
apiRef.current.setPage(0);
};
return (
<TablePagination
component="div"
color="primary"
count={pageCount * rowsPerPage}
page={page}
onPageChange={handleChangePage}
rowsPerPage={rowsPerPage}
onRowsPerPageChange={handleChangeRowsPerPage}
/>
);
};
return (
<div style={{ height: 400, width: "100%" }}>
<MuiDataGrid
{...data}
loading={loading}
pageSize={rowsPerPage}
hideFooter
components={{
Toolbar,
}}
/>
</div>
);
};