首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用借方时解释useCallback

使用借方时解释useCallback
EN

Stack Overflow用户
提问于 2021-05-02 07:56:49
回答 1查看 980关注 0票数 6

当只调用下面这样的When函数时:

代码语言:javascript
复制
const handler = debounce(someFunction, 2000);

它将在每次击键时调用someFunction。但是当我们把它包装在useCallback中时,它工作得很好。

代码语言:javascript
复制
const handler = useCallback(debounce(someFunction, 2000), []);

但据我所知,debounce函数应该在2000 ms之后调用someFunction,因此不应该在每次击键时调用该函数。但这不是我所期望的。

有谁能解释一下为什么useCallback在使用借记符时需要使用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-02 08:02:50

这取决于handler定义的作用域。

如果在组件的外部范围中定义了handler,那么它的工作方式将完全相同:

代码语言:javascript
复制
// Defined only once on file read
const handler = debounce(someFunction, 2000);

const Component = () => {
  return <button onClick={handler}>Run</button>;
};

但是,如果它是在内部范围中定义的,那么它实际上重新定义了每个呈现的函数,因此您可以在每个呈现上重置退出。

这就是为什么在每一次关键的笔划上,都不会应用任何的失败(它会在每次渲染中重置,这会让人感觉它不起作用)。

代码语言:javascript
复制
// Defined on every render
const Component = () => {
  const handler = debounce(someFunction, 2000);
  return <button onClick={handler}>Run</button>;
};

useCallback包装函数正好修复了这个问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67354132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档