Multistep Form Custom Hook With React And TypeScript

Поделиться
HTML-код
  • Опубликовано: 7 июл 2024
  • Multistep forms are a really common problem you need to solve in React, but there are no good ways to make it expandable to multiple forms. That is why I created this tutorial. It covers how to create a reusable React hook that can convert any existing set of forms into a multistep form.
    📚 Materials/References:
    GitHub Code: github.com/WebDevSimplified/r...
    JavaScript Only Multistep Form: • Can I Create This Comp...
    🌎 Find Me Here:
    My Blog: blog.webdevsimplified.com
    My Courses: courses.webdevsimplified.com
    Patreon: / webdevsimplified
    Twitter: / devsimplified
    Discord: / discord
    GitHub: github.com/WebDevSimplified
    CodePen: codepen.io/WebDevSimplified
    ⏱️ Timestamps:
    00:00 - Introduction
    00:25 - Demo
    01:05 - Setup
    02:12 - useMultistepForm Custom Hook
    05:50 - Form JSX/CSS
    13:00 - Form Steps JSX/CSS
    17:50 - Form Validation
    19:12 - Adding Form State
    27:00 - Handling Form Submission
    #React #WDS #MultistepForm

Комментарии • 155

  • @PrincessStache
    @PrincessStache Год назад +5

    Thank you so much! Typescript tutorials are so needed. I really appreciate how you go through each step and keep going back to get the needed functionality.

  • @oxynetz
    @oxynetz Год назад +3

    Enjoyed this format quick fast under 30mins, packed with useful tips and content. Well worth it. Thanks man

  • @olexandrperlov6426
    @olexandrperlov6426 Год назад

    this type of multi step form is so clean and ease that I can't be happier and I will definitely use it in my project. Thank you so much

  • @SeanCassiere
    @SeanCassiere Год назад +69

    The fact that you are making React tutorials using Vite and Typescript is mega awesome 👍🏼👍🏼👍🏼. Big up to you man.

    • @arshiagholami7611
      @arshiagholami7611 4 месяца назад

      nothing beats good ol' JS. typescript is for the weaks (writing this comment while waiting for intellisense finish loading)

  • @WatchMeLearnIt
    @WatchMeLearnIt Год назад +8

    Great video! Would LOVE to see a part 2 of this where you implement some kind of fetch request like you talked about at the end!

  • @EvertJunior
    @EvertJunior Год назад +1

    Great video. I usually work with a react-hook-form library and this video gave me some insights on how it probably work under the hood.

  • @niklassoderberg2168
    @niklassoderberg2168 Год назад +6

    This one was hard, but im learning typeScript so.. One of your best videos and I watch close to all of them!

  • @chinmoykr
    @chinmoykr Год назад +53

    When vite ask you for project name type "." then it will create your project in current directory. no need to move your files

    • @nabinsaud4688
      @nabinsaud4688 Год назад +5

      He know bro .but he want to make beginner friendly

    • @chinmoykr
      @chinmoykr Год назад

      Ohh nice.. Maybe it will help someone.. not him but someone...

    • @nabinsaud4688
      @nabinsaud4688 Год назад

      @@chinmoykr yes Lets meet bro show your github link

    • @TheZayzoo
      @TheZayzoo Год назад +2

      I didn't know, thanks for the free information.

    • @guestofallah7661
      @guestofallah7661 Год назад +1

      @@nabinsaud4688 so the comment need some expert to understand it ?

  • @clarkdnro
    @clarkdnro Год назад

    What a beautiful Form you created. Wow, very beautiful

  • @mountaingoatgaminggg9395
    @mountaingoatgaminggg9395 Год назад

    Loved this tutorial, used a lot of the concepts here in my irl project I am working on, now just gotta learn how to intergrate a signature pad and how to save that and Im golden! Good Stuff

  • @FalioV
    @FalioV Год назад +1

    Awesome tutorial dude! I dont know why took me so long, but now I'm subscribed!

  • @philipjamesajagabos2519
    @philipjamesajagabos2519 Год назад

    A second video from you that gives me good head-ups to understanding react. Thanks for the good content.

  • @bravo1oh1
    @bravo1oh1 Год назад +2

    I literally am needing this right now

  • @elelan
    @elelan Год назад +1

    This is what I've been searching everyday for past few months...! React with Typescript and Vite

  • @muhayminkhan7063
    @muhayminkhan7063 Год назад +2

    Today i've learned a best way to do some things thanks to you
    (1) React-simple-search-filter (form your other video)
    (2) Multistep-form-React-Typescript (This is the Brilliant way I guess )
    ❤❤

  • @kunfun1916
    @kunfun1916 Год назад +1

    Nice tutorial! I rewrote this in solid-js. Learn a lot.

  • @kelvink96
    @kelvink96 3 месяца назад +1

    I have been looking for such a tutorial. Thanks so much for this 👍👍

  • @developer_hadi
    @developer_hadi Год назад +5

    Bro thank you so much this is very simple and easy, please keep sharing things like this in react and typescript because it really makes my life easier as a beginner in react

    • @coderyan
      @coderyan Год назад +1

      Good luck with your journey with learning React!

    • @developer_hadi
      @developer_hadi Год назад

      @@coderyan thanks

  • @TheFirstUserHandle
    @TheFirstUserHandle 7 месяцев назад

    Great tutorial. Love your stuff. This helped me out significantly.

  • @kingsleyovo8889
    @kingsleyovo8889 Год назад +7

    Nice videos as always I have found that kyle slowly transform the language from js to ts…. Ts should be the greatest adapter for learning Java and js

  • @martinkoller3595
    @martinkoller3595 Год назад +2

    Great tutorial! I Appreaciate that a lot.

  • @anand_dudi
    @anand_dudi Месяц назад

    We need more this type of tutorial to solve problems in real world application. thanks kyle

  • @andresvodopivec5950
    @andresvodopivec5950 6 дней назад

    Great video. You solved a problem I had in 28 min. Appreciated for focussing more on the react part, instead of the styling part. Makes it easy to follow the video. I decided to sibscribe to your channel after this. Great content. Thanks

  • @marvelBoy1909
    @marvelBoy1909 Год назад +4

    Need more of these react typesrcipt vite projects 🔥 👍

  • @gyros9162
    @gyros9162 Год назад

    Thank you so much! I've used your approach in my student project and mentioned you in github )

  • @EricShans
    @EricShans Год назад +1

    Great video, took a bit but I fully understand it !

  • @fipabrate
    @fipabrate Год назад

    This helped me a lot. Thank you!

  • @darkNovaskar
    @darkNovaskar 11 месяцев назад

    Gotta say thank you for having a clear easy to understand voice. All these RUclipsrs got thick azz accents and this coding shit is hard enough 😤

  • @Alex-uc1mp
    @Alex-uc1mp Год назад +9

    Danke! Wow 😲 this is exactly what I was looking for today. Destiny 😄

    • @coderyan
      @coderyan Год назад +1

      Love it when a tutorial just comes out at the right time to solve a problem

    • @WebDevSimplified
      @WebDevSimplified  Год назад +1

      Glad I could help!

  • @kanishka5948
    @kanishka5948 Год назад +1

    Just what I needed 😌

  • @kartik7775
    @kartik7775 Год назад +1

    No matter how great a job I land in future, I'll always be grateful for your lessons and will dedicate my success to you. 🙌

    • @whatsapp176
      @whatsapp176 Год назад

      Helpline 📲📩⬆️
      Questions can come in⬆️

  • @baolee4622
    @baolee4622 8 месяцев назад

    Amazing explanation!

  • @piyushaggarwal5207
    @piyushaggarwal5207 Год назад

    Loved the tutorial

  • @focusroom_
    @focusroom_ Год назад

    Amazing as always

  • @paulthomas1052
    @paulthomas1052 Год назад +1

    Great video. Thanks.

  • @milendonchev737
    @milendonchev737 Год назад +1

    Great video as always my friend! Quick tip (you probably know, but anyway) - When you create a Vite app, which you want to be in your CWD, when it asks you for name of project, just type a dot (".") and it will create the project in there. :)

    • @coderyan
      @coderyan Год назад

      Nice tip! Something I can use in future projects.. pretty new to Vite

  • @simplyabdou8425
    @simplyabdou8425 Год назад +1

    great video Kyle

  • @pmioduszewski
    @pmioduszewski Год назад +1

    One day this video will save your day

  • @kinamartinez
    @kinamartinez 9 месяцев назад

    Thank you very much, its an amazing video, very useful

  • @user-zs8kg2nm4w
    @user-zs8kg2nm4w Год назад

    Thank you very much it helped me a lot☺

  • @blogpegaaki
    @blogpegaaki Год назад +1

    Amazing friend!

  • @yevhenlysenko7444
    @yevhenlysenko7444 Год назад +1

    More similar lessons with TS are needed)

  • @beinerthchitivamachado9892
    @beinerthchitivamachado9892 Год назад

    Kyle, you're the GOAT!

  • @Anushkai1
    @Anushkai1 6 месяцев назад

    It great. Thank you very much

  • @wudao88
    @wudao88 11 месяцев назад

    Thanks King

  • @UnderstandingCode
    @UnderstandingCode Год назад

    1m subs congrats

  • @mddx56
    @mddx56 27 дней назад

    Thank you!!! 🙌🙌

  • @AMoktar
    @AMoktar Год назад

    Amazing thanks 🙏

  • @benny-shen
    @benny-shen Год назад +1

    Great content

  • @khurshedaalam7478
    @khurshedaalam7478 6 месяцев назад

    Awesome bro love from india

  • @Mammodreoci
    @Mammodreoci Месяц назад

    Great video

  • @michaeltrembovler8301
    @michaeltrembovler8301 8 месяцев назад

    Grate. Thank you !!!

  • @GMPGIRI
    @GMPGIRI Год назад

    Please more React + Typescript projects. 🙏

  • @gray_hat
    @gray_hat Год назад +10

    There is also a ReactPropsWithChildren interface your props could extend. That automatically adds a children field to your props

    • @piyushaggarwal5207
      @piyushaggarwal5207 Год назад +1

      It is PropsWithChildren actually. Thanks!

    • @piyushaggarwal5207
      @piyushaggarwal5207 Год назад

      There is one problem though what if we want the children to be required. It is optional in the type you mentioned.

    • @gray_hat
      @gray_hat Год назад +2

      The type for children is ReactNode
      If children is required by your usecase then you can potentially add `children: ReactNode` without using PropsWithChildren.
      Although for such use cases you probably have a specific type you might wanna use for children and not the generic one. So you can do that too.

    • @uome2k7
      @uome2k7 3 месяца назад

      ​@@piyushaggarwal5207 you can use the Require util type to set fields of a type to be required.

  • @vinitjain7
    @vinitjain7 Месяц назад

    thank u so much sir

  • @oleksiihmyrko7969
    @oleksiihmyrko7969 Год назад +1

    Thanks so heplful!

  • @Alyaman_Accounting_System
    @Alyaman_Accounting_System Год назад

    awesome thank very match

  • @eliamzg
    @eliamzg Год назад +1

    This would have been great 2 years ago before I had to come up with my own as a junior react dev

  • @kathirmldata7411
    @kathirmldata7411 Год назад +2

    Happy Aayutha Pooja 🥰

  • @shahramhz1444
    @shahramhz1444 11 месяцев назад

    Tnk excellent ❤❤

  • @zakidzz
    @zakidzz Год назад +1

    please make a course on typescript bigginer and advanced

  • @abdullahrafique2883
    @abdullahrafique2883 Год назад

    hey thanks so much for this wonderful tutorial. what if I wanna write the custom validation to any of the individual form field?

  • @joaoarthurbandeira
    @joaoarthurbandeira 9 месяцев назад

    Hey Kyle,
    - How can i implement this in combination with Zod, for example?
    - Also, how could i modify the code if i want to use Redux toolkit for this?
    - And how can i implement the 'goTo' part so i can quickly jump to a specific part of the form?
    - Finallly, Will the state be preserved even if the user refreshes the page or - in a system - log out and log in again?
    Lots of questions haha, but thanks anyway!

  • @artemryabykh
    @artemryabykh 3 месяца назад

    Thank you for the guide! Could you please advise if we can use custom validation with this form?

  • @mohammadkhakhsoor2068
    @mohammadkhakhsoor2068 14 дней назад

    thanks , wish it had other types of inputs and also validation
    please create one with more detail , like when in one of the steps there are 3 itmes to choose between one of them and only one of them should be selected and go to the next form

  • @turbulantarchitect5286
    @turbulantarchitect5286 Год назад +1

    Hi Web Dev Simplified, can you please make a series on how to create reusable form component, input components, error/validation handling with Hooks. Thanks

    • @whatsapp176
      @whatsapp176 Год назад

      Helpline 📲📩⬆️
      Questions can come in⬆️

  • @mustak_085
    @mustak_085 Год назад

  • @justpeace7852
    @justpeace7852 Год назад +3

    Лайк не глядя

  • @plamenpetkov746
    @plamenpetkov746 Год назад +1

    What's the alternative for steps: ReactElement[] from the custom hook in ReactJS, cuz I don't know TypeScript?

  • @yahiachougui6074
    @yahiachougui6074 Год назад +1

    Great video, is there a way to pass the fnction next() or a function goTo() to one of the step elements? that way when you have like a summary step where you review all the information you can go back to a particular step and change the information in it?

    • @pofiabel9526
      @pofiabel9526 Год назад

      Hi I am currently having same challenge. Can someone anyone please respond to this question. Thanks in anticipation.

  • @jokrdev3517
    @jokrdev3517 Год назад

    thank you for this great tutorial sir, please why can i persist data for checkbox ?

  • @penguinthesolver1405
    @penguinthesolver1405 11 месяцев назад

    Hello! Thanks for tip, but how to implement custom validation for every form in this scheme?

  • @gopinathkrm58
    @gopinathkrm58 Год назад

    thanks and great, and I have a doubt from ur Spotify clone video, it is playing only for 30 seconds but how to play it fully. I used audio_preview_url from response data.

  • @shivamrathore8291
    @shivamrathore8291 Год назад

    Hey,
    thanks for the video.
    (apart from video's topic) I am in a little bit of confusion in CSS
    CONFUSION : can we edit/modify the input box blinking cursor
    I want to change the input box cursor blinking animation style from blink to expand (like VS code)
    is this possible? if yes then please make a video or at least tell me how can I achieve this??,
    if not then why??

  • @amitakolkar2389
    @amitakolkar2389 Год назад +1

    This is a great way to create a multistep form. Thanks for sharing.
    How can we handle a large forms with different sections?
    Here as well you have maintained one single state at parents and its updating whole object every onchange event. {...pre, ... currentField}
    Having soo many inputs and those are dependent on each other. As we are passing a object down it rerenders all children components. We can pass a primitive data to children and use useCallback hook at the top. But still it doesn't seems like best way. Can you please create a video on that about how to handle a large forms with best performance.

    • @whatsapp176
      @whatsapp176 Год назад

      Helpline 📲📩⬆️
      Questions can come in⬆️

  • @karis7539
    @karis7539 Год назад +1

    Would be so much cooler with carousel animation

  • @kanishkkumar535
    @kanishkkumar535 11 месяцев назад

    you are fast AF

  • @juanita8149
    @juanita8149 Год назад

    Any sources on how to accomplish this with Select? Specifically, when the Select is in a separate component?

  • @Mutoforma
    @Mutoforma Год назад

    Awesome!
    Around 26:30, how were you highlighting both instances of 'email' in the value/onChange props?

  • @zixuanchen8898
    @zixuanchen8898 Год назад +1

    Very great tutorial, I want to ask about how to let the code auto format when on save?

    • @coderyan
      @coderyan Год назад

      In most code editors, you can access the "preference" tab, and then you can search for "on save" -- often, you'll see an option to enable format on save

    • @zixuanchen8898
      @zixuanchen8898 Год назад

      @@coderyan Thank you!

  • @carolinatavares1843
    @carolinatavares1843 Год назад

    do you think this project could benefic of using useReducer instead of useState?

  • @avtar618
    @avtar618 Год назад

    hey bro can yoy make course on backend? your way of teaching is awsome i'm starting css today by the time i will end frontend if you has backend course it will be awsome

  • @sandeepsinghmehra3237
    @sandeepsinghmehra3237 Год назад

    How to add routing and change components with routing within multistep in react-router v6?

  • @deepikarao2593
    @deepikarao2593 Месяц назад

    How would you use formik with this stepper function for validations

  • @Distortie
    @Distortie Год назад

    Anyone have issue with pages 2 and 3 not keeping their data when going back and forwards through the buttons? the data object gets updated.. just not the data staying inside the input fields

  • @nandoomb
    @nandoomb Год назад +1

    Great, but... If you put your buttons (next, back,...) inside your "Step Component". How could you do that?

  • @nirajgurung8348
    @nirajgurung8348 Год назад

    How can we add frontend validation in this form?

  • @Lichkuroro
    @Lichkuroro Год назад

    Hey Chief!! , im not using, typescript and when i send the steps from app to useMultiStepHook, it is received as an array of objects, so console.log(steps) reads its info, but console.log(steps.lenght) is undefined..
    heres what inside steps [ {
    '$$typeof': Symbol(react.element),
    type: 'div',
    key: null,
    ref: null,
    props: { children: 'One' },
    _owner: null,
    _store: {}}, {... }, {...} ]
    but steps.lenght is undefined.. thnx in advance

  • @eddyelamin9015
    @eddyelamin9015 Год назад

    Hi Kyle can you help me with this mongoose error : Task validation error path content is required
    Im on version 6.6.5 btw

  • @awekeningbro1207
    @awekeningbro1207 Год назад

    Is there a reason why is the form data state and the form data handler not put in the hook?

    • @SeanCassiere
      @SeanCassiere Год назад

      That is because the hook is being used purely for managing the logic of the multi-step process. This would then allow for multiple independent multi-steps forms sets to be implemented without having to duplicate and manage that logic.
      Plus the form state and submit stuff could change quite abit depending on the type of info being collected and is better left to the dev to handle that individually.

  • @szymonoleszek2086
    @szymonoleszek2086 Год назад +1

    Why did you switch to vite? Is CRA dead now? How are the things look like with setting up the react projects now?

    • @SeanCassiere
      @SeanCassiere Год назад +2

      CRA isn't quite dead yet, but you really should be using Vite instead.
      Since Vite uses ESBuild the dev experience is much faster. Also, it doesn't give you foot guns like polyfilling node_modules into the client which could create some unintentional mess ups.

  • @bigguns845
    @bigguns845 Год назад

    How can i build a booking appointment for a doctor office

  • @rosmildolopes3985
    @rosmildolopes3985 День назад

    Can I use "useForm"? like "register" for example? cause I need all inputs are completed

  • @DilanDog
    @DilanDog Год назад

    What about this… [steps,setSteps]=useState([…] )and just loop over and Set counter :D

  • @goodPoints012
    @goodPoints012 Год назад

    you could just use function generator )

  • @anaordonez7906
    @anaordonez7906 8 месяцев назад

    what does the & mean when he declared the UserFormProps???
    type UserFormProps = UserData & {
    updateFields: (fields: Partial) => void;
    }

  • @MightyKingKala
    @MightyKingKala Год назад

    I love you

  • @illuminatiOrden
    @illuminatiOrden 9 месяцев назад

    How to use that goTo Function ??

  • @jasonzhang4632
    @jasonzhang4632 Год назад

    neat

  • @kmylodarkstar2253
    @kmylodarkstar2253 6 месяцев назад

    nice video thanks!
    type FormData = typeof INITIAL_DATA; best choice?