【发布时间】:2020-05-09 02:26:27
【问题描述】:
通常,为了将onChange 回调函数传递给组件,您需要执行以下操作:
const handleChange = (e) => {
console.log(e.target.value)
}
return (
<Component onChange={handleChange} />
)
如果您不希望每次主组件都渲染 Component,则必须将其包装在 React.useCallback() 挂钩中,如下所示:
const handleChange = React.useCallback((e) => {
console.log(e.target.value)
}, [])
return (
<Component onChange={handleChange} />
)
如果此输入是在基于列表的 for 循环中生成的,您希望回调了解更改的来源。传递信息的最常见方式是如下链接 lambda:
const fields = ['field1', 'field2', 'field3']
const handleChange = (fieldName) => (e) => {
console.log(`${fieldName}: `, e.target.value)
}
return (
<>
{fields.map((x) => <Component onChange={handleChange(x)} />}
</>
)
但在这种情况下,在使用 React.useCallback() 挂钩将整个上下文保留在函数中的同时记住外部和内部 lambdas 是不可能的。
在大多数情况下,我可以控制组件并更改回调以包含所需的数据,但通常会发生组件来自库(例如 Material-UI),因此无法修改。
React Hooks 可以通过什么方式完全记住这个回调?
【问题讨论】:
标签: javascript reactjs lambda react-hooks memoization