反应材料表自动页面大小

Art*_*ich 7 reactjs material-design material-ui material-table

我正在使用 React + Material Table。

我的问题

  • 有没有办法根据页面上的可用空间动态设置pageSize
  • 如果没有 API 可以这样做 - 如何从组件设计的角度更好地解决这个问题?

我想要达到什么目标?

材料表中显示的行数应取决于屏幕尺寸。根据您的屏幕尺寸,页面看起来不会相似(例如,在笔记本电脑上它可能看起来不错,但在 25 英寸显示器上会有很多空间可以由行填充)。

我已经做了什么?

  • 我搜索了官方文档,但找不到解决方案。
  • 我也在寻找开发人员帖子和其他 SO 主题 - 仍然没有结果。

当然,可以构建一个脚本,根据容器大小和行大小进行一些简单的计算以填充尽可能多的行,但我想避免这种解决方案,并尽可能使用开箱即用的东西。

小智 5

我也有同样的要求。所以我找到了一个解决方案,通过使用' 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>
    );
    }
Run Code Online (Sandbox Code Playgroud)