【问题标题】:"react-hooks/exhaustive-deps": "warn" for eslint-plugin-react-hooks is too sensitive?“react-hooks/exhaustive-deps”:eslint-plugin-react-hooks 的“警告”太敏感了?
【发布时间】:2021-09-03 17:52:47
【问题描述】:
  useEffect(() => {
    const apiCall = async () => {
      try {
        let newSearchFormOptions = { ...searchFormOptions };
        ...

        setSearchFormOptions(newSearchFormOptions);
      } catch (e) {
        setPageState({ error: e.error });
      } finally {
        setPageState({ isLoading: false });
      }
    };

    apiCall();
  }, []);

在我将 eslint 添加到项目之前,上面的代码没有 eslint 问题。在项目中添加 eslint 规则后,它显示“React Hook useEffect 缺少依赖项:'searchFormOptions'。”但是,searchFormOptions 是状态,setSearchFormOptions 将更新它,这使得“apiCall”被一次又一次地调用。我知道我们可以使用 eslint 来禁用此警告,但我担心的是 eslint 规则是否过于敏感,而我计划仅在安装组件时触发一次“apiCall”。我们是否需要依赖 eslint 规则,或者我们需要自己仔细检查,然后使用 eslint 禁用此警告,或者我们是否有任何其他解决方法?

提前致谢。

【问题讨论】:

    标签: react-hooks eslint use-effect


    【解决方案1】:

    Quote 来自 react 团队成员:

    你可以放

    // eslint-disable-next-line react-hooks/exhaustive-deps

    如果有充分的理由,则在违规行之前。通常禁用 这是一个错误,以后会严重咬你。 (大多数情况下 人们认为可以安全禁用的地方不安全并导致陈旧 关闭。)

    有时当我知道我想在挂载期间只运行一次效果中的内容时,我已禁用它。

    【讨论】:

    • 遗憾的是它实际上并没有提供另一种使用它的方法:(
    • @JamieHutber 我不确定你的意思,但如果有帮助,我链接到的 github 线程中有更多讨论。
    • 是的,理想情况下我想避免通读这些内容:) 但我基本上想知道在 useEffect 中使用 ([]) 的替代方法是什么。我想不出一个函数运行一次的太多其他方式
    • @JamieHutber 是的,我也不认为有其他选择。
    猜你喜欢
    • 2020-06-09
    • 2020-05-01
    • 2021-04-15
    • 2023-03-24
    • 2020-01-18
    • 2020-06-22
    • 1970-01-01
    • 2019-11-26
    • 2022-08-18
    相关资源
    最近更新 更多