react-table 对 react-select 非常慢:如何加快速度?
react-table is extremely slow with react-select: how to speed it up?
我有 table 的 editable 数据显示 react-table
。我正在为单元格使用 react-select
。每当我更改条目时,页面更新都需要很长时间(接近一秒)。我怎样才能加快速度?
这是官方“editable table”示例的分支:https://codesandbox.io/s/gracious-cdn-fcu3i?file=/src/App.js,修改为使用 <Select>
而不是 <input>
。
该官方示例中的部分代码更新了模糊数据:
// We'll only update the external data when the input is blurred
const onBlur = () => {
updateMyData(index, id, value)
}
这意味着即使在元素之间切换也非常慢。我能够通过在 updateMyData
中添加一个检查来解决这个问题,如果数据实际上没有改变就中止:
const updateMyData = (rowIndex, columnId, value) => {
if (data[rowIndex][columnId] === value) return;
etc. // (otherwise update)
}
这样就解决了 Tab 键问题,我相信,但是数据输入呢?例如,是否可以将其设为异步,否则会产生危险的后果?
他们对输入使用 onBlur
的原因是为了避免在每次击键后重新渲染整个 table,选择你没有同样的问题,所以你不需要要完全使用 onBlur
,只需在 onChange
处理程序中报告更新(也无需将值保留在单元格状态中)。也就是说,整个解决方案看起来并不是特别有效 - 每次更改后 table 都会重新呈现两次。我将 updateMyState
封装到 useCallback
中,将 SelectCell
封装到 memo
中,这似乎使它好一点,但您可能想找到另一种方法,特别是如果您有一个大table。不管怎样,看看这里https://codesandbox.io/s/tender-night-vymfi?file=/src/App.js
我有 table 的 editable 数据显示 react-table
。我正在为单元格使用 react-select
。每当我更改条目时,页面更新都需要很长时间(接近一秒)。我怎样才能加快速度?
这是官方“editable table”示例的分支:https://codesandbox.io/s/gracious-cdn-fcu3i?file=/src/App.js,修改为使用 <Select>
而不是 <input>
。
该官方示例中的部分代码更新了模糊数据:
// We'll only update the external data when the input is blurred
const onBlur = () => {
updateMyData(index, id, value)
}
这意味着即使在元素之间切换也非常慢。我能够通过在 updateMyData
中添加一个检查来解决这个问题,如果数据实际上没有改变就中止:
const updateMyData = (rowIndex, columnId, value) => {
if (data[rowIndex][columnId] === value) return;
etc. // (otherwise update)
}
这样就解决了 Tab 键问题,我相信,但是数据输入呢?例如,是否可以将其设为异步,否则会产生危险的后果?
他们对输入使用 onBlur
的原因是为了避免在每次击键后重新渲染整个 table,选择你没有同样的问题,所以你不需要要完全使用 onBlur
,只需在 onChange
处理程序中报告更新(也无需将值保留在单元格状态中)。也就是说,整个解决方案看起来并不是特别有效 - 每次更改后 table 都会重新呈现两次。我将 updateMyState
封装到 useCallback
中,将 SelectCell
封装到 memo
中,这似乎使它好一点,但您可能想找到另一种方法,特别是如果您有一个大table。不管怎样,看看这里https://codesandbox.io/s/tender-night-vymfi?file=/src/App.js