首页 > 解决方案 > 用钩子复制 componentDidMount 的正确方法是什么?

问题描述

我无法理解componentDidMount使用反应钩子重新创建生命周期函数行为的正确方法。

我发现普遍接受的方法是这样的:

useEffect(() => {
  //do componentDidMount stuff here
}, []);

但是,当存在其他参数、其他依赖项等时,我会遇到 linting 错误,如下例所示:

useEffect(() => {
  fetchData(design, onSuccess, onError);
}, []);

那会引发掉毛错误。处理这种情况的正确方法是什么?我想避免禁用 eslint。

React Hook useEffect 缺少依赖项:'design' 和 'onSuccess'。要么包含它们,要么删除依赖数组 react-hooks/exhaustive-deps

标签: reactjs

解决方案


我猜你得到了exhaustive-deps错误?

使用时useEffect,建议将效果中使用的所有值放在依赖项数组中,这样您就可以“诚实”地了解效果使用的值。Dan Abramov 在这里谈到了这个https://overreacted.io/a-complete-guide-to-useeffect/#two-ways-to-be-honest-about-dependencies

但是,如果您乐于忽略这一点,并确定您只希望此效果在此组件第一次呈现时运行,那么您可以使用// eslint-disable-line exhaustive-deps.

编辑:实际上没有办法解决这个问题,因为严格来说,最终你对你的部门并不“诚实”。


推荐阅读