reactjs - 如何创建转发依赖项的 React hooks

标签 reactjs typescript react-hooks

假设我想创建一个类似于 useEffect 的 React Hook,但它仅在所有依赖项都不为空时运行。它看起来像这样:

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

但是,这无法通过“严格依赖”linter:

  • 它将回调视为未声明的依赖项。
  • 我无法解析 deps,因为它不是数组文字。

是否有某种方法可以创建这样的 Hook ,我可以从用户那里获取一组依赖项并将它们转发到“真正的” Hook ?

(我的实际用例更复杂,这只是出于 Stack Overflow 目的的问题的简单表达)

最佳答案

如果您不像这样内联声明 useEffect 回调,我认为 linter 不会提示 deps 或回调:

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

不确定这是否是故意的,或者行为将来是否可能会改变,但现在如果您检查此 codesandbox 中的问题选项卡应该报告 0 个 linting 问题。

关于reactjs - 如何创建转发依赖项的 React hooks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229489/

相关文章:

javascript - 链接转到最后滚动位置而不是 anchor

javascript - React native 无法使用 Image.source iOS 的本地 tmp 文件路径

javascript - 在每个组件中存储和访问全局标志/变量,该值不断变化

reactjs - 无法更新 react Hook 中 setInterval 内的状态

javascript - React 功能组件在重新渲染时重新初始化局部函数和变量(React Hooks)

javascript - 如何从另一个表单组件更新书籍列表?

javascript - 在 React/Redux 中过滤数组元素

javascript - 对象 es6 过滤器的双重嵌套数组

angular - 使用异步/等待时,错误处理程序返回默认值

typescript - Vue 3 + Vite + Typescript - 开发和构建没有发现 TS 错误