reactjs - React Hook useEffect 缺少与 Useeffect 挂钩的依赖项。忽略此警告是不好的做法吗?
问题描述
我有一个使用效果来验证两个密码是否相等。我只想在 confirm_pw 状态更改时运行,而不是在密码状态更改时运行。
我已经完成了这个
useEffect(() => {
if (password !== confirm_pw) {
setPasswordMismatchErr(true);
} else {
setPasswordMismatchErr(false);
}
}, [confirm_pw])
这完全符合预期!但是,反应不断告诉我
React Hook useEffect has a missing dependency: 'password'. Either include it or remove the dependency array
我应该忽略这个警告吗?有什么方法可以更改代码并保持所需的结果?
密码和confirm_pw定义为:
const [password, setPassword] = useState("");
const [confirm_pw, setConfirmPW] = useState("");
并使用
<input
className="box__input"
name="password"
value={password}
onChange={handlePassword}
type="password"
required
/>
<input
className="box__input"
name="confirm_pw"
value={confirm_pw}
type="password"
onChange={handleConfirmPassword}
required
/>
Handleconfirmpassword 和 handlePassword 是 setstate 函数的简单包装器。
解决方案
短绒是正确的。您当前的代码有一个错误:如果用户确定他们正确输入了确认密码,并且需要在第一次输入时重新输入密码怎么办?然后,在进行更改后,尽管两个密码框匹配,passwordMismatchErr
仍将保留true
.
添加password
到依赖数组:
}, [password, confirm_pw])
然后,对于passwordMismatchErr
,为了在用户最初输入时不显示它,请先检查是否confirm_pw
为空。例如:
{
passwordMismatchErr && confirm_pw ? <div>Error...</div> : null
}
您还可以useEffect
使用以下方法简化回调:
setPasswordMismatchErr(password !== confirm_pw);
推荐阅读
- azure-active-directory - 通过 msal.js 刷新令牌
- javascript - 尝试创建一个不包含样本的集群,但 addLayer 未定义
- spring - 如何在 Spring JPA 中为 @Table(name=p+"name") 赋予动态值
- mongodb - mongo中的嵌套查找或聚合
- javascript - HTML5 - 无加速或延迟的视频倒带
- grails - Grails:为什么来自 GET 请求的 JSON 没有绑定到控制器操作中的命令对象?
- python - 如何使用“下一步”按钮对烧瓶表单进行分页?
- c# - 如何正确添加 WebRequest 标头?
- apache-spark - pyspark shell 连接到哪个集群?
- python - 将许多 txt/csv 文件编译为单个数据框,并将文件名添加为列