11

我写了这个钩子(可能有错误,我还没有使用它):

import { useCallback, useEffect } from 'react';
import _throttle from 'lodash/throttle';

export function useThrottledCallback(cb, delay, ...deps) {
  const callback = useCallback(_throttle(cb, delay), deps);

  useEffect(() => {
    const lastCallback = callback;

    return () => lastCallback.cancel();
  }, [callback]);

  return callback;
}

有没有办法可以使这个钩子的详尽-deps 规则 lint 用法?

useThrottledCallback(() => (a + b + c)}, 100, [])

在这种用法中,我想被告知a,bc需要在依赖数组中。

4

1 回答 1

11

这应该很容易。文档说:

exhaustive-deps可以配置为使用 additionalHooks 选项验证自定义 Hooks 的依赖关系。此选项接受正则表达式来匹配具有依赖关系的自定义 Hook 的名称。

所以你想要这样的东西:

{
  "rules": {
    // ...
    "react-hooks/exhaustive-deps": ["warn", {
      "additionalHooks": "useThrottledCallback"
    }]
  }
}
于 2021-01-13T17:52:03.737 回答