#javascript #arrays #reactjs #object #react-redux
#javascript #массивы #reactjs #объект #реагировать-redux
Вопрос:
Я реализовал проверку формы, используя пользовательский хук, где он отправляет ошибки в виде объектов для формирования в приведенном ниже формате.
errors : {
userEmail: {
required: true
}
}
И компонент формы, как показано ниже
import React from 'react';
import { FormInput } from './../FormInput/FormInput.component';
import { useFormValidation } from './../../shared/utils/useFormValidation';
import { Button } from './../Button/Button.component';
import './SignIn.styles.css';
import FormFieldsData from './../../shared/data/form-fields';
const SignIn = () => {
// FORM INITIAL STATE
const formInitialState = {
userEmail: '',
userPassword: ''
};
// SETTING VALIDATION RULES FOR FORM FIELDS
const fieldValidationRules = {
userEmail: { required: true, isValidEmail: true },
userPassword: { required: true}
};
// INITIALIZING FORM USING HOOK
const [
signInFormState,
errors,
isValid,
handleInputChange,
handleFormSubmit,
handleBlur
] = useFormValidation(formInitialState, fieldValidationRules);
console.log(errors.userEmail.required);
const { userEmail, userPassword } = signInFormState;
return(
<div className = 'SignInSection'>
<h1> Sign In here..!! </h1>
<form onSubmit = {handleFormSubmit} >
<FormInput
{...FormFieldsData.userEmail}
value = {userEmail}
clicked = {handleInputChange}
blur = {handleBlur} />
{/* Validation Error Message */}
<FormInput
{...FormFieldsData.userPassword}
value = {userPassword}
clicked = {handleInputChange}
blur = {handleBlur} />
<Button
type = 'submit'
btn_label = 'Login'
btn_size = 'sm'
disabled = {!isValid}
btn_bg = '#00ACEE'
btn_color = '#FFFFFF' />
<Button
type = 'button'
btn_label = 'Cancel'
btn_size = 'sm'
btn_bg = '#4b4b4b'
btn_color = '#FFFFFF' />
</form>
</div>
)
};
export { SignIn }
При попытке получить доступ к требуемому полю из объекта error для реализации сообщения о проверке я получаю следующую ошибку.
Пожалуйста, подскажите мне, как достичь этой функциональности?
;
Комментарии:
1. Ошибка означает, что значение
errors.userEmail
равноundefined
. Похоже, вы не получаете данные, которые ожидаете получить. Либо используйте защитный код и убедитесь, что свойство существует, прежде чем пытаться получить доступ к «подсвойству», либо исправьте callsite так, чтобы он всегда передавал «полный» объект.2. Компонент формы получает данные, как и ожидалось. ошибки.userEmail будет добавлен к объекту данных динамически при возникновении ошибки проверки
3. Затем вы должны написать защитный код:
{errors amp;amp; errros.userEmail amp;amp; errors.userEmail.required ? .... : null}
.4. @FelixKling Вы можете использовать для этого необязательную цепочку прямо сейчас:
errors?.userEmail?.required || null
5. к вашему сведению, вы также можете использовать необязательную цепочку:
errors?.userEmail?.required