CodeSandBox: https://codesandbox.io/embed/react-table-editable-content-ggvcy
当尝试处理对 React-table 的输入时,我的输入失去了焦点,所以我一次只能键入 1 个字符。
如何修复渲染周期以允许输入?
编辑:我不小心用代码的工作版本更新了沙箱,尽管它有另一个错误:由于专注于模糊更改,如何在刷新更新期间捕获反应事件?
这个问题非常狡猾:当你将"Cell"渲染道具传递给反应表时,它将被当作一个反应组件。这意味着他们将像这样使用:<Cell ... />
. 查看 https://github.com/tannerlinsley/react-table/blob/v6.9.2/src/utils.js#L208 和 https://github.com/tannerlinsley/react-table/blob/v6.9.2/src/index.js#L541
这意味着,在每次渲染时,您将创建一个新的组件renderEditable,因此当显示更改时,旧的 renderEditable 将被卸载,而新的组件将取而代之。这是不幸的,因为内部输入会失去焦点。
你可以做的是使用旧版本(没有钩子(,如下所示:https://github.com/tannerlinsley/react-table/blob/8b07b2c84e0ee29e0ecaa4fe23e96e864ab806a9/archives/v6-examples/react-table-editable-content/src/index.js
或者像这样一直使用钩子:https://github.com/tannerlinsley/react-table/blob/5145a632c944d135863d8a2f14a160a2f9395f61/examples/editable-data/src/App.js
将自动对焦添加到输入对我有用。
我遇到了同样的问题。
如果可以使用 useRef 而不是 useState 作为状态句柄,则可以快速修复重新渲染或卸载的问题。
参考这个: https://blog.bitsrc.io/5-ways to-avoid-react-component-re-renderings-90241e775b8c#:~:text=useState((%20Hook%20is%20widely,without%20causing%20component%20re%2Drenderings.