我在 material-ui 中有一个<Tabs />
组件,它有一个用于更改模式的处理程序。on change 有这个签名(来自链接):
Signature :
function(event: object, value: any) => void
event: 回调
值的事件源:我们默认为child的索引(数字)
我的实现有点像这样:
<Tabs
value={mode}
onChange={handleChange}
/>
<Tab id="choice1" value="one" label="Choice 1" />
<Tab id="choice2" value="two" label="Choice 2" />
</Tabs>
我的handleChange
函数只是一个围绕类似 useState 的钩子的箭头 fn
const handleChangeMode = (event, newMode) => {
setMode(newMode);
}
为了避免每次都重新创建此箭头 fn,我尝试这样做:
const handleChangeMode = useCallback((event, newMode) => {
setMode(newMode);
}, [setMode]);
但我注意到,变化最大的东西,新模式不是部门的一部分,因此可能无法正常运行?然后我从我最黑暗的梦境中召唤出这个怪物:
const handleChangeMode = useCallback((event, newMode) => {
useCallback(() => setMode(newMode), [setMode, newMode])();
}, [setMode]);
一路回调。
以前,这个问题(React hooks useCallback with parameters inside loop)建议不要useCallback
在这种情况下使用。但由于这是可以一遍又一遍地调用的东西,它似乎是这样做的地方。此外useMemo
,我想依赖传递给钩子的变量的例子也没有解决,我什至认为它在这个例子中不起作用(例如,我使用错误的钩子,以及不知道如何将它用于我的示例)。
我该如何解决这个问题?
(编辑:事实上,我根本无法嵌套回调/备忘录挂钩。所以最后一个代码示例不起作用,正如我所怀疑的)