如何创建反应依赖性的钩子



假设我想创建一个像 useEffect一样的react钩子,但是它只有在所有依赖项都是非零的时才能运行的。看起来这样:

const useNonNullEffect = (callback: () => void, deps: any[]) => useEffect(() => {
    if(deps.every(dep => dep !== null)) callback()
}, deps)

但是,这无法传递"严格依赖性" linter:

  • 它将 callback视为未宣布的依赖。
  • 我不能解析deps,因为它不是数组字面的。

是否有某种方法可以创建这样的钩子,在这里我将一组依赖项从用户中转发到"真实"钩子?

(我的实际用例更为复杂,这只是出于堆栈溢出目的的问题的简单表达(

,如果您不声明自己的使用效果效果回调,我认为林格不会抱怨deps或回调。

const useNonNullEffect = (callback: () => void, deps: any[]) => {
  const fn = () => {
    if(deps.some(dep => dep === null)){
      return
    }
    return callback()
  }
  useEffect(fn, deps)
}

不确定是否是故意的,或者将来的行为是否会发生变化,但是目前,如果您在此codesandbox中选中"问题"选项卡,则应报告0个刺激问题。

最新更新