首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >useCallback内联函数样式

useCallback内联函数样式
EN

Stack Overflow用户
提问于 2020-03-15 19:23:39
回答 1查看 1.5K关注 0票数 2

有什么区别吗?

第一个例子:

代码语言:javascript
复制
const onClose = useCallback(onModalClose, []);

第二个例子:

代码语言:javascript
复制
const onClose = useCallback(() => onModalClose, []);

onModalClose调用作为组件支柱:

代码语言:javascript
复制
<CustomComponent
  onModalClose={() => setDeleteModal(false)}
/>

当使用第二个例子时,linter会对我大喊大叫,因为deps数组是空的,所以onModalClose应该在deps数组中,这会导致多个重呈现问题。使用第一个示例不会引起重呈现问题,也不需要deps数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-15 21:18:02

假设您在第二个示例中指的是const onClose = useCallback(() => onModalClose(), []);,唯一显著的区别是第二个被包装在内联函数中。

useCallback需要一个函数来回忆录,这就是它的签名。在不了解函数onModalClose的情况下,linter在第一个示例中没有什么可抱怨的,因为您将函数直接回溯为回调。在第二步中,您将声明一个匿名函数,该函数调用另一个函数。这个函数调用linter查看并建议将其添加到依赖数组中。

根据定义onModalClose的位置,您可能能够安全地将其添加到依赖数组中(也就是说,如果它是在函数组件之外定义的,那么它的引用是稳定的,不会在呈现之间更改),或者您可以将依赖数组保留为空,并且可能需要将// eslint-disable-next-line react-hooks/exhaustive-deps添加到它上面的行中,以便linter停止“对您大喊大叫”。

代码语言:javascript
复制
const onClose = useCallback(onModalClose, []);

代码语言:javascript
复制
const onClose = useCallback(
  () => onModalClose(),
  // eslint-disable-next-line react-hooks/exhaustive-deps
  [],
);

在两者之间,我更喜欢第一个,因为很明显,您正在回溯函数回调,并且需要更少的文本(即不需要提供一个eslint覆盖。

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

https://stackoverflow.com/questions/60696738

复制
相关文章

相似问题

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