javascript - 当我尝试显示对象属性或 console.log - React & Hooks 时,对象属性未定义
问题描述
我对反应有点陌生,我不明白为什么我的对象属性未定义但是当我 console.log 我的对象看起来不错时,请参阅此屏幕截图:
这是我的自定义钩子useForm:
const useForm = (callback, validateRegister) => {
const [values, setValues] = useState({
name: '',
email: '',
password: '',
confirmPass: '',
});
const [errors, setErrors] = useState({});
const [isSubmitting, setIsSubmitting] = useState(false);
const handleChange = (event) => {
const { name, value } = event.target;
setValues({
...values,
[name]: value,
});
};
const handleSubmit = (event) => {
event.preventDefault();
setErrors(validateRegister(values)); // validateReister is another function that returns and object with these properties.
setIsSubmitting(true);
};
useEffect(() => {
if (Object.keys(errors).length === 0 && isSubmitting) {
callback();
}
}, [errors]);
return {
handleChange,
handleSubmit,
values,
errors,
};
};
export default useForm;
零件:
const { handleChange, handleSubmit, values, errors } = useForm(
submit,
validateRegister
);
问题:
{errors.nameError}
没有出现,也没有出现在 console.log 上。任何想法?
解决方案
我认为你的validateRegister(values)
回报是Promise
. 尝试将您的实现更改为以下内容:-
const handleSubmit = (event) => {
event.preventDefault();
validateRegister(values).then(data => setErrors(data)).catch(err => console.log(err));
setIsSubmitting(true);
};
推荐阅读
- java - java gui背景颜色不覆盖整个页面
- python - 将数百万个文件移动到 Amazon Glacier
- asp.net-core - 在为 asp.net core v3.1 应用程序进行 webdeploy 时如何设置“stdout=true”?
- mysql - Mysql INNER JOIN + MATCH AGAINST:如何加速
- java - notifyAll() 后函数继续,但函数返回后线程终止
- google-cloud-firestore - Firestore .set 不保存来自 Firebase 云功能的数据
- c++ - 写一个宏函数来改变字符串的大小写?
- c - 将结构内的整数类型数组初始化为 NULL 是否可以/有效?
- python - 如何将一天中的分钟附加到 Python 中的列表中?
- mysql - mysql复制错误:截断不正确的DOUBLE值