【发布时间】:2019-09-24 19:18:02
【问题描述】:
我是 React 新手,我正在尝试使用 react 箭头函数实现一些错误验证,但一整天都没有运气。 catch 有效,我可以打印错误,但我不知道如何将我在 errorsHandler() 中打印的错误链接到表单用于样式和警告的其他 const。
const errorsHandler= fieldErrors => {
if (fieldErrors) {
fieldErrors.forEach(err => {
const errorFieldName= err.field;
const errorDescription = err.message;
console.log('Field', errorFieldName, 'Description', errorDescription);
// Field name Description name already exists
});
}
};
export const defaultGroupModel = {
description: '',
active: true,
name: '',
}
const GroupFormModal = ({ editId, editGroup, onSave}) => {
const [groupState, setGroupState] = useState(defaultGroupModel);
useEffect(() => {
if (editGroup) {
setGroupState(editGroup);
}
}, [editGroup]);
const handleChange = ({ target: { value, name} }) => {
setGroupState({ ...groupState, [name]: value });
};
return ( (...) <Form onSubmit={e => onSave(e, groupState)} onReset={onReset}> (...);
};
const mapDispatchToProps = dispatch => ({
onSave: (e, group) => {
e.preventDefault();
if (group.id) {
dispatch(updateGroup(group));
} else {
dispatch(createGroup(group)).catch(error => {
errorsHandler(error.data.fieldErrors);
});
}
},
});
export default connect(
mapStateToProps,
mapDispatchToProps,
)(GroupFormModal);
我尝试创建一个 [errorState, setErrorState] 并在 errorsHandler 中使用 useEffect,但得到了 Invalid Hook。如何使 catch 内的句柄与表单处于相同的上下文中?
提前谢谢你
【问题讨论】:
-
请注意,try-catch 不适用于 React 组件,因为它们是声明性的。出于同样的目的,React 有一个错误边界的概念。一定要调查一下。
标签: reactjs validation react-redux react-16