hooks中是否需要对所有函数使用useCallback?

发布于 2022-09-12 03:21:37 字数 218 浏览 11 评论 0

RT
不少文章都是解释说useCallback本身就有性能消耗,所以不要对每一个函数都使用useCallback。
但是读了精读react hooks最佳实践后,又看到说要对每一个函数都使用useCallback

看的文章越多就越困惑到底哪种说法才是正确的呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

煮茶煮酒煮时光 2022-09-19 03:21:37

应该换个说法:只在有需要的时候使用useCallback
useCallback从来不是为了优化内联函数性能而存在的
官方文档的描述:

Returns a memoized callback.

使用它的目的是为了一些子组件不必要的重新渲染。

举个例子,我现在有一个自定义hook,功能是在组件mount时侦听页面click事件,unmount时取消事件

代码是这么设计的:

const useDocumentClick = (callback: () => void) => {
  useEffect(() => {
    console.log("effect");
    document.addEventListener("click", callback);
    return () => document.removeEventListener("click", callback);
  }, [callback]);
};

const App = () => {
  const [count, setCount] = useState(0);
  useDocumentClick(() => {
    console.log("document click");
  });
  return (
    <div>
      <button onClick={() => setCount(count + 1)}>click me!</button>
    </div>
  );
};

这会存在一个问题就是App每次状态发生变化时,都会重复一遍addEventListener, removeEventListener的动作,这显然是不必要的。解决方案:

useDocumentClick(
    useCallback(() => {
      console.log("document click");
    }, [])
);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文