Каково эквивалентное значение document.getElementById().setCustomValidity() в Reactjs

#javascript #reactjs

#javascript #reactjs

Вопрос:

Здравствуйте, моя проблема заключается в создании эквивалентного значения document.getElementById().setCustomValidity() в Reactjs для моей регистрационной формы для проверки поля ввода имени

вот мой код

 function CreateAcc() {

   const[name,setName] = useState({firstname:''})

   const onChangehHandle = e => setName({firstname: e.target.value})

   const onblr = () =>{
      if(name.firstname==''){
          //here i just want to change the alert to document.getElementById().setCustomValidity() to 
            validate the firstname input field
          
         alert('Please fill out this input field')
      }
  } 
   return (
      <div>
        
        <form id='createAccForm'>
        <h2>Create Account</h2>
        <div className='text-box'>
            <label><FaUserCircle size='20px'/></label>
            <input className='createAccInputInline' id = 'firstname' type='name' name = 'firstname' placeholder='First Name' onBlur={onblr} value ={name.firstname} onChange={onChangehHandle}/>
            <input className='createAccInputInline' type='name' name = 'lastname' placeholder='Last Name' />
        </div>

        <div className='text-box'>
            <label htmlFor = 'email'><MdEmail size='20px'/></label>
            <input id = 'email' type='email' placeholder='Email Address'/>
        </div>

        <div className='text-box'>
            <label><BsFillLockFill size='20px'/></label>
            <input className='createAccInputInline' type='password' placeholder='Password'/>
            <input className='createAccInputInline' type='password' placeholder='Confirm Password'/>
        </div>

        <button id = 'createAccButton'>Sign Up</button>

        </form>
    </div>
)
}

export default CreateAcc
  

Комментарии:

1. setCustomValidity устанавливает пользовательское сообщение о достоверности для элемента выбора в указанное сообщение — но ваш вопрос, похоже, хочет прочитать это значение? или я неправильно понимаю?

2. Вам нужно использовать ссылки, а затем установить пользовательскую проверку при монтировании.. а затем в опции размытия вы можете активировать проверку подлинности с помощью красных… вторым вариантом будут контролируемые компоненты…

Ответ №1:

Вам не нужна отдельная функция onblr . Мы можем установить пользовательское сообщение проверки, используя setCustomValidity() метод внутри onChangeHandle .

    const onChangehHandle = name = e => {
     setName({[name]: e.target.value});
     if(name=='firstname' amp;amp; e.target.value == '') {
       event.target.setCustomValidity("Please fill out this input field");    
     } else {
       event.target.setCustomValidity('');
     }