dependencies - 使用 useEffect 和 useState 避免 ESLint 'react-hooks/exhaustive-deps' 警告
问题描述
我正在使用useEffect()
钩子通过“useState”调用更新某些状态:
useEffect(
() => {
const newProps = {}
departments.forEach(dept => {
const { code } = dept
const newCode = code.toLowerCase()
newProps[newCode + '_reviewer'] = ''
})
setFormValues({ ...formValues, ...newProps })
},
[departments]
)
不出所料,ESLint 给了我一个警告formValues
:
React Hook useEffect has a missing dependency: 'formValues'.
但是,它继续提到:
Either include it or remove the dependency array.
You can also do a functional update 'setFormValues(f => ...)'
if you only need 'formValues' in the 'setFormValues' call
react-hooks/exhaustive-deps
我对神秘的“setFormValues(f => ...)”方法很感兴趣。这到底是什么意思?我应该如何重写setFormValues({ ...formValues, ...newProps })
以避免 ESLint 警告,而不添加formValues
作为依赖项或添加// eslint-disable-next-line react-hooks/exhaustive-deps
?
我试过查看 repo,我最接近的是this,它似乎没有提到这个特殊的解决方法。
解决方案
您可以将一个函数传递给以该状态的当前值作为第一个参数的 set 函数,并将该状态设置为您在该函数中返回的值。
所以你可以改为:
setFormValues(fValues => ({...fValues, ...newProps}));
并且当您不使用 formValues 状态的任何地方 useEffect 时,您可以避免将其添加到 deps 数组
推荐阅读
- c# - 更新源时的 C# BitmapImage 源内存问题
- spring - Spring Boot 消耗 2 个 rest 并合并一些字段
- asp.net-core - post_logout_redirect_uri 为空 OpenIdConnect IdentityServer
- html - 针对移动设备将 5 列表拆分为两部分
- docker - 使用 gradle 作为构建工具为 Kotlin http4k 后端创建 Docker 映像
- netsuite - 供应商自定义支出限制
- android - 部分设备连接相机服务失败
- python-3.x - 在 Python 中处理转义文本到字典
- reporting-services - SSRS - 仅在矩阵中的某些列上查找
- python - 如何使用 matplotlib 向具有权重的直方图添加误差线?