Проблема проверки формы в Reactjs с помощью React-Hook-Form

Я пытаюсь выполнить проверку формы с помощью формы реакции-крючка. Он отлично работает, за исключением одной проблемы: он не проверяет тип ввода. Я хочу, чтобы пользователь вводил только URL-адрес, но эта вещь проверяет его как простой текст. Где я ошибся?

function EditAvatarPopup({ isOpen, onClose, onUpdateAvatar, submitButtonName }) {

  const { register, formState: { errors }, handleSubmit } = useForm();
  const [link, setLink] = useState('');

  function handleInput(e) {
    setLink(e.target.value)
  }

  function handleSubmitButton() {
    console.info(link)
    onUpdateAvatar({
      avatar: link
    });
  }

  return (
    <PopupWithForm 
      name = "change-avatar"
      title = "Update avatar" 
      submitName = { submitButtonName }
      isOpen = { isOpen }
      onClose = { onClose }
      onSubmit = { handleSubmit(() => handleSubmitButton() ) }
    >
      <label htmlFor = "userAvatar" className = "form__form-field">
        <input 
          id = "userAvatar" 
          type = "url"
          { ...register('userAvatar', { 
            required: "Enter URL link",
            value: link 
          }) 
          } 
          placeholder = "url link"
          className = "form__input" 
          onChange = { handleInput }
        />
        { errors.userAvatar && (<span className = "form__error">{ errors.userAvatar.message }</span>) }
      </label>
    </PopupWithForm>
  );
}

Похоже, type = "url" не работает, но я не могу понять, почему

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
37
1

Ответы 1

Вот минимальный рабочий пример: https://codesandbox.io/s/react-hook-form-js-forked-ml3zx?file=/src/App.js

Я рекомендую не перезаписывать реквизиты onChange, вместо использования const [link, setLink] = useState(''); вы можете использовать const link = watch('userAvatar').

Вы можете удалить свойство value, это не обязательно:

<input 
  id = "userAvatar" 
  type = "url"
  { ...register('userAvatar', { 
      required: "Enter URL link",
      value: link //⬅️ Remove that line
    }) 
  } 
  placeholder = "url link"
  className = "form__input" 
  onChange = { handleInput } //⬅️ Remove that line 
/>

Форма React Hook - Watch API

Другие вопросы по теме