- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我刚开始使用 Material UI我非常喜欢它。现在,我们正在开展一个项目,该项目涉及来自菲律宾特定城市的用户、员工和地址的数据,我决定使用表格将其显示给客户,因为我发现这要容易得多。所以,这个表需要进行分页、排序、过滤等,而我们是在服务器端做的。显然,客户端需要发送几个数据,如 { page: 1, page_size: 50, ....}
这就是我们在我的 react 中所做的。
我现在的问题是我认为是 DataGrid
.我认为该表不会重新渲染 rowCount
获取 totalRows
后数据库中的数据。我有沙盒 here (PS:你必须放大输出屏幕才能看到rowsPerPageOptions
。)但是你可以注意到它第一次加载下一个箭头 被禁用并且不会重新渲染时间 实际数据包括加载的行数。但是,如果您像更改页面大小一样继续导航,它就会像没有问题一样可用。
我现在有点被这个问题困住了,我什至不知道我是否以正确的方式使用它。任何帮助将不胜感激。
import { useState, useEffect } from "react";
import { DataGrid } from "@material-ui/data-grid";
import { Box } from "@material-ui/core";
const dummyColorsDB = [
{ id: 1, color: "red" },
{ id: 2, color: "green" },
{ id: 3, color: "blue" },
{ id: 4, color: "violet" },
{ id: 5, color: "orange" },
{ id: 6, color: "burgundy" },
{ id: 7, color: "pink" },
{ id: 8, color: "yellow" },
{ id: 9, color: "magenta" },
{ id: 10, color: "random color" },
{ id: 11, color: "another random color" },
{ id: 12, color: "last one" }
];
export default function App() {
const [data, setData] = useState({
loading: true,
rows: [],
totalRows: 0,
rowsPerPageOptions: [5, 10, 15],
pageSize: 5,
page: 1
});
const updateData = (k, v) => setData((prev) => ({ ...prev, [k]: v }));
useEffect(() => {
updateData("loading", true);
setTimeout(() => {
const rows = dummyColorsDB.slice(
(data.page - 1) * data.pageSize,
(data.page - 1) * data.pageSize + data.pageSize
);
console.log(rows);
updateData("rows", rows);
updateData("totalRows", dummyColorsDB.length);
updateData("loading", false);
}, 500);
}, [data.page, data.pageSize]);
return (
<Box p={5}>
<DataGrid
density="compact"
autoHeight
rowHeight={50}
//
pagination
paginationMode="server"
loading={data.loading}
rowCount={data.totalRows}
rowsPerPageOptions={data.rowsPerPageOptions}
page={data.page - 1}
pageSize={data.pageSize}
rows={data.rows}
columns={[{ field: "color", headerName: "Color", flex: 1 }]}
onPageChange={(data) => {
updateData("page", data.page + 1);
}}
onPageSizeChange={(data) => {
updateData("page", 1);
updateData("pageSize", data.pageSize);
}}
/>
</Box>
);
}
最佳答案
当您通过像这样多次调用来更新组件状态时:
updateData("rows", rows);
updateData("rowCount", dummyColorsDB.length);
updateData("loading", false);
您的
updateData
电话
setState
但因为
setState
异步执行,它们不会同时更新。实际上,第一次渲染时分页不起作用的原因是因为您设置了网格
rows
在设置其
rowCount
之前.我的猜测是,在检查代码库后,这是一个 Material-UI 错误。他们似乎没有添加
state.options.rowCount
到
useEffect
中的依赖数组所以更新时不会重新渲染
rowCount
之后。
// set rows first
updateData("rows", rows);
setTimeout(() => {
// set rowCount later
updateData("rowCount", dummyColorsDB.length);
updateData("loading", false);
}, 100);
但是尝试设置
rowCount
首先,分页再次工作
// set rowCount first
updateData("rowCount", dummyColorsDB.length);
setTimeout(() => {
updateData("rows", rows);
updateData("loading", false);
}, 100);
另一种解决方案是同时更新所有相关状态:
setData((d) => ({
...d,
rowCount: dummyColorsDB.length,
rows,
loading: false
}));
现场演示
关于reactjs - Material-UI:设置 rowCount 时 DataGrid 服务器端分页问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66950096/
我正在使用 Avalonia.Controls.DataGrid。默认情况下,当网格获得焦点并按下 Enter 时,它会自动处理事件并将选择移动到下一项。我怎样才能防止这种默认行为?我想要一个自定义的
根据我所见,Dojo DataGrid 中的格式化程序函数被赋予以下参数:单元格值、单元格行号和单元格对象本身。鉴于这些参数,您能否建议如何获取此单元格所引用的数据存储项?或者,如果您能提出替代方法,
我是DoJo开发的新手,所以这可能很基础。 我创建了一个EnhancedDatagrid,它可以很好地显示数据。 数据来自另一个页面中的JSON存储。 我有一个按钮,该按钮导致在数据存储中创建一个新条
我正在尝试在 WPF DataGrid 的 RowDetailsTemplate 中创建一个 DataGrid。 我有一系列工作。每个工作都可以分配一个或多个员工: public class Job
我有一个数据网格组件: [... some controlls ...]
我已经以编程方式创建了一个dojox.grid.datagrid,并且我需要对列进行自定义排序。为此,我尝试使用 ItemFileWriteStore.comparatorMap['field'] =
我试图在 UWP RadDataGrid 控件的 Telerik UI 中隐藏 GroupPanel。 radgrid.ShowGroupPanel 不起作用。 最佳答案 UserGroupMode=
我收到“在使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素”错误,我不确定原因。 我正在尝试将数据网格嵌套在数据网格中。如果我只使用
我的 WPF forme Etudiant 中有一个 DataGrid 当单击 Etudiant 中名为 Epreuve 的行时,我需要显示其他数据网格,并且当在 Epreuve 中选择一行并且我需要
我有一个 DataGrid“嵌套”在另一个 DataGrid 的 RowDetailsTemplate 中。只要我的鼠标悬停在父 DataGrid 上行的主要部分上,滚动就可以正常工作,但是当鼠标悬停
我花了几个小时看这个没有结果。 我只是想要一个DataGrid X 列保持与 Grid 的相对宽度本身。 因此,例如: 第 1 栏:10% 第 2 栏:10% 第 3 栏:10% 我设置了一个附加到
我有 3 个共享相同数据类型的数据网格。我想配置一次列绑定(bind)并让 3 个数据网格共享资源。 例如
我之前关于检测 VM 中的属性更改的帖子不够深入,所以我发布了这个 我有一个工作网格。每个工作可以有一个或多个员工。 DataGrid 的 RowDetailsTemplate 包含另一个用于显示员工
我将尝试找出将 ComboBox 嵌入到 Flex (3.4) DataGrid 中的“正确”方法。根据权利(例如,根据本页 http://blog.flexmonkeypatches.com/200
我有一个对象集合,我们称之为 People,每个对象都由名称、ID 和时间字符串组成。这些人物必须显示在类似于固定行数和 9 列的网格上。这个想法是将人员作为行添加到第 1、2 和 3 列中的网格左侧
默认行为是使用 CTRL+Click 取消选择 Datagrid 中的项目 我希望能够通过鼠标单击(左键或右键)网格中的空白区域并让它取消选择任何选定的项目。 我已经用谷歌搜索死了,发现了一些非常复杂
我正在使用 DataGrid来自 WPF Toolkit我需要能够将注意力集中在网格的底部(即最后一行)。我现在遇到的问题是,随着行的添加,DataGrid 的滚动条不会随着新行的添加而滚动。实现此目
我正在使用 DataGrid 来管理服务配置。我想使用自动生成的行复选框来管理多个删除操作,但想使用 onRowClick 事件将行数据提供给模态对话框表单进行编辑。我的 onRowClick 处理程
我有一个包含项目的 DataGrid。当您右键单击其中一行时,会显示一个 Dojo 上下文菜单,其中包含删除该行的选项。如果您尝试右键单击 DataGrid 的空白区域,则不会显示上下文菜单……但是,
我想在另一个 Datagrid 的 RowDetailsTempalte 中使用一个 DataGrid。此内部 Datagrid 应将其列绑定(bind)到外部 Datagrid 中当前对象的属性。例
我是一名优秀的程序员,十分优秀!