我正在使用React +材质表。
我有问题
我要实现什么目标?
“材料表”中显示的行数应取决于屏幕尺寸。根据您的屏幕尺寸,该页面的外观看起来并不相似(例如,在笔记本电脑上看起来可能不错,但在25英寸显示屏上,会有很多空间可以被行填充)。
我已经做了什么?
当然可以构建一个脚本,该脚本根据容器大小和行大小进行一些简单的计算,以填充尽可能多的行,但是我想避免这种解决方案并使用一些现成的方法如果可能的话。
答案 0 :(得分:2)
我也有同样的要求。因此,我通过使用“ react-virtualized-auto-sizer”软件包中的 AutoSizer 找到了解决方案。与“材料表”软件包配合得很好。
示例代码:
import AutoSizer from 'react-virtualized-auto-sizer';
export default function Monitor() {
const columns = [...];
const data = [..];
return (
<AutoSizer>
{({ height, width }) => {
console.log(`Height: ${height} | Width: ${width}`);
const pageSize = Math.floor((height - 192) / 48);
console.log(`Page Size: ${pageSize}`);
return (
<div style={{ height: `${height}px`, width: `${width}px`, overflowY: 'auto' }}>
<MaterialTable
columns={columns}
data={data}
options={{
pageSize: pageSize,
pageSizeOptions: [],
toolbar: true,
paging: true
}}
icons={tableIcons}
></MaterialTable>
</div>
);
}}
</AutoSizer>
);
}
答案 1 :(得分:1)
最适合我的解决方案是跟踪(material-table docs):
<MaterialTable minRows={10}
localization={{
toolbar: {
searchPlaceholder: "Buscar",
searchTooltip: "Buscar "
},
pagination:{
labelRowsSelect:"Registros",
labelRowsPerPage:"Filas por pagina"
},
body: {
deleteTooltip: "Eliminar",
emptyDataSourceMessage: "No existen registros"
}
}}
title="Listado de registros"
columns={state.columns}
data={state.data}
actions={[
{
icon: 'add',
tooltip: 'Agregar',
isFreeAction: true,
onClick: props.addRegister
}
]}
options={{
pageSize: 10,
pageSizeOptions: [5, 10, 20, 30 ,50, 75, 100 ],
toolbar: true,
paging: true
}}
components={{
Pagination: props => (
<TablePagination
{...props}
labelRowsPerPage={<div style={{fontSize: 14}}>{props.labelRowsPerPage}</div>}
labelDisplayedRows={row => <div style={{fontSize: 14}}>{props.labelDisplayedRows(row)}</div>}
SelectProps={{
style:{
fontSize: 14
}
}}
/>
)
}}
>
</MaterialTable>