Типизация неуправляемой формы в React

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ต.ค. 2022
  • Типы React формы. Смотрим как можно работать с неуправляемой формой без использования рефов и как это возможно с TypeScript.
    Код из видео codesandbox.io/s/unruffled-te...
    Мои курсы по вебу с купонами:
    ✅ mishanep.com/
    📢 Поддержка канала:
    / mishanep
    www.tinkoff.ru/rm/nepomnyasch...
    paypal.me/mishanep

ความคิดเห็น • 24

  • @gregpozdnykov3539
    @gregpozdnykov3539 ปีที่แล้ว +10

    Спасибо за видео, реакт + тс - мастхэв, при этом не так уж и много хороших пособий об этом. Хотелось бы в будущем увидеть что-то о типизации хуков.

  • @victormog
    @victormog ปีที่แล้ว +9

    Кратко, качественно и по существу!
    Однозначно, буду использовать в своих проектах (вместо кучи useState)

  • @andrewsam224
    @andrewsam224 ปีที่แล้ว

    Cпасибо, огромное Михаил!!! Снимайте ещё, очень доступно объясняете. Вы делаете этот мир лучше!!!

  • @nikolaysmolov8031
    @nikolaysmolov8031 ปีที่แล้ว

    Михаил, спасибо за видео! Инфа годная, рассказываешь хорошо, приятно слушать. Успехов!

  • @protonys
    @protonys ปีที่แล้ว +1

    Это просто класс! Спасибо!

  • @user-nh6wb3op5j
    @user-nh6wb3op5j ปีที่แล้ว

    ой какая же круть, супер полезный контент, низкий поклон правда, на курсах даже не найдешь такого)

  • @STELLS541
    @STELLS541 10 หลายเดือนก่อน

    Очень классно и элегантно) 🙏🏻💪🏻

  • @andrewsam224
    @andrewsam224 ปีที่แล้ว

    Охереть как круто! Я прям кайфую от разбора.

  • @andrewsam224
    @andrewsam224 ปีที่แล้ว

    Я бы с удовольствием бы посмотрел уроки длинной 40+ минут. Очень качественно. Спасибо.

  • @vadymkononenko685
    @vadymkononenko685 ปีที่แล้ว

    Супер! Спасибо за видео! Лайк! #react #typescript #javascript #js #ts

  • @alexles5003
    @alexles5003 10 หลายเดือนก่อน

    Интересный подход спасибо

  • @andrewsam224
    @andrewsam224 ปีที่แล้ว

    Миша, мне кажется твоим голосом нужно вообще все обучалки озвучивать. Очень хорошо поставлена интонация, размеренно плавно уверенно. Красава!!!!

  • @user-fk6ng8bk7s
    @user-fk6ng8bk7s ปีที่แล้ว

    Часто бывает, что названия полей в форме соответсвует названием полей в типе используемых данных формы (хоть и не всегда). Сейчас в Вашем примере Вы отдельно объявляете FormFields и LoginFormFields. И там и там одинаковые названия "свойств". Чтобы этого избежать, можно использовать такую конструкцию:
    type FormFields = {
    [F in keyof LoginFormFields]: HTMLInputElement
    };
    Тогда, при добавлении нового поля в форму (fullName, например) нужно будет расширить только один тип - LoginFormFields

  • @profesor08
    @profesor08 ปีที่แล้ว +1

    Фактически получили дыру, так как типизация хоть и есть, но она только на словах и ничего не гарантирует. Если не окажется полей с нужными именами, то получим call property of undefined, прямо в рантайме. Тут надо типизировать сам компонент формы, чтоб в зависимости от переданного ему типа, он требовал бы наличие определенных полей с конкретным именем, ну и соответственно самостоятельно выводил бы свой тип, на основе переданных полей и их имен.

  • @denissorokin6823
    @denissorokin6823 ปีที่แล้ว

    При такой реализации Form, получается мы не может динамически валидировать вводимые данные, только встроенной валидацией и всю форму?

  • @DennaRal
    @DennaRal ปีที่แล้ว +1

    Мерси

  • @ringnull
    @ringnull ปีที่แล้ว +1

    9:45 formFields откуда берется? ты его не импортишь, откуда он там берется?

    • @CyberGenius777
      @CyberGenius777 ปีที่แล้ว

      Эти значения приходят из полей форм при onSubmit

    • @ringnull
      @ringnull ปีที่แล้ว

      @@CyberGenius777 Каким образом? Я понимаю, что они туда должны приходить, но в элементе просто вызов функции без параметров. Как он понимает, что это именно те значания, которые нужны?

    • @CyberGenius777
      @CyberGenius777 ปีที่แล้ว +1

      @@ringnull почитай как форма работает

    • @ringnull
      @ringnull ปีที่แล้ว

      @@CyberGenius777 там где-то реф стоит и я не заметил этого или что?

    • @fergussawyer
      @fergussawyer ปีที่แล้ว

      @@ringnull вообще то объявляет этот тип прямо в этом файле 6:28, если все еще не понятно, то под видео есть ссылка на код из видео, открой и посмотри

  • @lexandersuslov1745
    @lexandersuslov1745 ปีที่แล้ว

    Спасибо за видео, узнал дополнительную информацию о типизации ивентов. Попробовал воспользоваться твоим способом, но столкнулся с проблемой. При использовании Rеact Testing Library при тестировании формы в фунции обработчике handleChange падает ошибка event.currentTarget.submitBtn is undefined. Однако в браузере все работает. Пока не нашел в чем причина. Возможно ты знаешь в чем дело?
    UPD: Нашел решение. В моем случае нужно к искомому элементу обращаться e.currentTarget.elements.submitBtn. Но тогда сам евент достаточно типизировать как обычно, а elemets нужно типизировать как пересечение типов HTMLFormControlsCollection & FormFields