React钩子通过eslint-plugin-react-hooks @ next附加不需要的值

时间:2019-08-01 14:36:24

标签: reactjs react-hooks

我的组件中有一个useEffect钩子,该钩子调用Redux动作来获取一些数据。

useEffect(
 () => {
   props.getClientSummaryAction();
  },[]
);

当我去保存文件时,lint会这样做。

useEffect(
  () => {
    props.getClientSummaryAction();
 }, [props] 
);

显然getClientSummaryAction将我的组件发送到一个无限循环中,因为它获取了一些更新道具的数据。

我已经使用过这样的解构方法,而linter会更新数组。

  const { getClientSummaryAction } = props;

  useEffect(
    () => {
      getClientSummaryAction();
    },
    [getClientSummaryAction]
  );

我很满意,但这没有任何意义,因为getClientSummaryAction显然不会被更新,它是一个函数。

我只想知道短绒棉为什么要这样做以及这是否是最佳实践。

1 个答案:

答案 0 :(得分:1)

这不是不必要的。您知道一个依赖关系不会改变的事实,但是React可能知道这一点。规则很明确:

  

要么传递包含所有依赖项的数组,要么不传递任何内容给第二个参数,然后让React跟踪更改。

将第二个参数传递给useEffect是为了告诉React您负责挂接的呼叫。因此,当您不传递效果eslint中包含的依赖项时,这将视为可能的内存泄漏并发出警告。 DO NOT disable the rule就像您已经做的那样继续传递依赖关系。可能会觉得多余,但这是最好的。