在 Material-Table 中重新排序后是不是可以获得当前页面数据?

Posted

技术标签:

【中文标题】在 Material-Table 中重新排序后是不是可以获得当前页面数据?【英文标题】:Is it possible to get the current page data after re-ordering in Material-Table?在 Material-Table 中重新排序后是否可以获得当前页面数据? 【发布时间】:2020-02-05 17:00:39 【问题描述】:

即使在排序后我也需要获取当前页面数据。分页更改后可以获取当前页面数据,但排序后无法获取。这可能吗? onOrderChange 仅返回列 ID 和方向。

有没有返回排序后数组的方法?

const [currentPage, setCurrentPage] = useState(0);
const [rowsPerPage, setRowsPerPage] = useState(5);

const currentPageItems = useMemo(() => removeData.slice(currentPage * rowsPerPage, currentPage * rowsPerPage + rowsPerPage),
    [removeData, currentPage, rowsPerPage]);

return (
    <MaterialTable
        data=remoteData
        options=
          pageSize: 5,
          pageSizeOptions: [5, 10, 25],
          sorting: true,
        
        onChangePage=setCurrentPage
        onChangeRowsPerPage=setRowsPerPage
    />
)

【问题讨论】:

我添加了一个PR 将当前显示的数据添加到onOrderChange。希望这会有所帮助 谢谢。我发现我可以通过参考访问数据。 【参考方案1】:

我发现我可以通过 tableRef 访问排序后的数据。

const tableRef = useRef(null);
const [currentPage, setCurrentPage] = useState(0);
const [rowsPerPage, setRowsPerPage] = useState(5);

const sortedData = tableRef.current?.dataManager?.sortedData ?? [];

const currentPageItems = useMemo(() => sortedData.slice(currentPage * rowsPerPage, currentPage * rowsPerPage + rowsPerPage),
    [removeData, currentPage, rowsPerPage]);

return (
    <MaterialTable
        tableRef=tableRef
        data=remoteData
        options=
          pageSize: 5,
          pageSizeOptions: [5, 10, 25],
          sorting: true,
        
        onChangePage=setCurrentPage
        onChangeRowsPerPage=setRowsPerPage
    />
)

更新:据我了解,这并不可靠,但可能是我正在做的事情。如果我尝试在效果中访问 tableRef 并在进行更改时记录,则不会发生任何事情。 (tableRef 没有改变)

useEffect(
    () => 
      tableRef.current?.dataManager?.sortedData &&
        console.log(tableRef.current.dataManager.sortedData);
    ,
    [tableRef]
  );

【讨论】:

*tableRef 解决方案不可靠。不要使用 你能描述或展示一些不可靠的代码吗?也许这表明数据结构中存在更深层次的问题? 是的,因为 tableref 是对表的引用,它不会改变,因为它始终是同一个表。为什么不将 sortedData 放入 [] 中?顺便说一句,您使用 create react app 吗?访问者? 不使用 CRA。你的意思是依赖吗? [tableRef.current.dataManager.sortedData] ? 我猜如果引用永远不会改变,那么每次都需要返回新数据?【参考方案2】:

我正在使用如下所示通过代码动态更改页面的工作:

tableRef.current.dataManager.changeCurrentPage(5).
let tableState = tableRef.current.dataManager.getRenderState();
tableRef.current.setState(tableState);

getRenderState() 将返回一个 obj ,它提供了表状态的所有信息。

【讨论】:

如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review 这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review【参考方案3】:

以防万一其他人有同样的问题:

tableRef.current.onQueryChange(page: 0, search: '')

【讨论】:

以上是关于在 Material-Table 中重新排序后是不是可以获得当前页面数据?的主要内容,如果未能解决你的问题,请参考以下文章

材料表中是不是有自定义排序功能来对文件大小进行排序?

numpy.transpose 是不是在内存中重新排序数据?

SwiftUI - iPad 上的拖放重新排序是不是可以在没有 EditMode 的情况下工作?

包中声明的类型的实例在编译调试后是不透明的

每次需要访问特定索引处的元素时是不是可以重新排序数组?

数据变化时如何在ReactJS中刷新Material-Table(Material-ui)组件