javascript - React Hook 不断抛出错误缺少依赖项
问题描述
React Hook useEffect 缺少依赖项:'callback' 和 'isSubmit'。尝试验证注册表单,但我收到此错误仍然是 React 的菜鸟,请帮助
import { useState, useEffect } from "react";
const useForm = (callback, validate) => {
const [values, setValues] = useState({
firstName: '',
lastName: '',
email: '',
password: '',
confirmPassword: ''
});
// Handle Errors
const [errors, setErrors] = useState({})
const [isSubmit, setIsSubmit] = useState(false)
// Hold entered input
const handleChange = e => {
const { name, value } = e.target;
setValues({
...values,
[name]: value
});
};
// Prevent Form from submitting
const handleSubmit = e => {
e.preventDefault();
setErrors(validate(values));
setIsSubmit(true);
};
useEffect(
() => {
if (Object.keys(errors).length === 0 && isSubmit) {
callback();
}
},
[errors]
);
return {handleChange, values, handleSubmit, errors};
};
export default useForm;
我正在处理简单的注册表单,我无法理解为什么这个反应会抛出这个特定的错误消息。任何帮助将不胜感激
解决方案
您可以将这个警告作为emartini 上面的答案,但我想知道为什么您需要useEffect。我们可以不使用 useEffect 来达到同样的效果吗?像这样的东西:
import { useState, useEffect } from "react";
const useForm = (callback, validate) => {
const [values, setValues] = useState({
firstName: '',
lastName: '',
email: '',
password: '',
confirmPassword: ''
});
// Handle Errors
const [errors, setErrors] = useState({})
// Hold entered input
const handleChange = e => {
const { name, value } = e.target;
setValues({
...values,
[name]: value
});
};
// Prevent Form from submitting
const handleSubmit = e => {
e.preventDefault();
const validateErrors= validate(values);
if (Object.keys(validateErrors).length === 0) {
callback();
}
setErrors(validateErrors);
};
return {handleChange, values, handleSubmit, errors};
};
export default useForm;
推荐阅读
- python - TypeError:将一个函数传递给另一个函数时,“函数”对象不可下标
- stored-procedures - 如何将 VARCHAR2 的 TYPE VARRAY 参数列表传递给 PL-SQL 存储过程并在循环中访问参数列表
- python - 如何告诉python传递给函数的意外变量类型在上下文中是正确的
- sql - 如何通过 Oracle 中的 SQL 查询找到每个 id 的 TOP/MAX 值?
- reactjs - 为什么在 React 示例中使用 null 初始化 useRef?
- uwp - 如何在 UWP 应用程序中清除 MediaPlayer 的缓存?
- ios - swift 5 TextBox 值在标签中显示
- amazon-web-services - 带有traefik的ec2-instance前面的aws WAF
- javascript - 文件上传正在使用 Postman,但不适用于从浏览器运行的 Javascript
- reactjs - Expo App:任何导航器都未处理“TOGGLE_DRAWER”操作