

React - formulieren
React
useRef


Probleem
- Download todo-list-exercise_solution.zip
- npm install
- npm run dev
- Wat is er niet optimaal?
- Tip: React rendert een component opnieuw wanneer state verandert. We willen onnodige renders zoveel mogelijk vermijden!

useRef
- βοΈ Wat is er niet optimaal?
- Bij elke aanpassing (change) in het tekstveld, wordt de component opnieuw gerenderd.
Maar: als we niet op Submit klikken, wijzigt er niets. - Oplossing? β useRef
- Bij elke aanpassing (change) in het tekstveld, wordt de component opnieuw gerenderd.

useRef
useRef is a React Hook that lets you reference a value thatβs not needed for rendering.
- Input-element opslaan in een variabele, want het moet/mag niet opnieuw gerenderd worden
- Andere voorbeelden? Documentatie

useRef
export default function App() {
const taskDescriptionInputRef = useRef<HTMLInputElement>(null);
// ...
function handleSubmit() {
if (taskDescriptionInputRef.current && taskDescriptionInputRef.current.value) {
setTasks([...tasks, { id: crypto.randomUUID(), description: taskDescriptionInputRef.current.value, isCompleted: false }]);
taskDescriptionInputRef.current.value = "";
}
}
// ...
return (
<div>
<h1>Todo List</h1>
<div>
<input type="text" placeholder="Add your task" ref={taskDescriptionInputRef} />
<div>
<button onClick={handleSubmit}>Submit</button>
</div>
</div>
{showTasks()}
</div>
);
}React
Formulieren valideren


Formulieren valideren
= nagaan of de data die een gebruiker ingeeft,
overeenkomt met alle verwachtingen en beperkingen
- Server-side validation
- Client-side validation π

Validaties
- Welke formuliervalidaties kunnen we bedenken?
Denk aan onderstaande velden:- Postcode
- Paswoord
- Telefoonnummer
- Ondernemingsnummer
- ...

Validaties
- βοΈ Welke formuliervalidaties kunnen we bedenken?
- Lengte
- Formaat / patroon (reguliere expressie)
- Vereist / optioneel
- Bereik (tussen x en y)
- Cross-field (bv. overeenkomende paswoorden)
- ...

useRef
- Voorbeeld: maximale lengte valideren
β HTML: maxlength-attribuut- β οΈ geen custom foutboodschap mogelijk
- β οΈ te lange tekst wordt afgekapt
- Oplossing in React?
β state: taskDescriptionLengthError

React Hook Form
β οΈ Opgepast: React β JS(X)-notatie
minlengthβ minLengthmaxlengthβ maxLength- ...

Formulieren valideren
- Code wordt snel onoverzichtelijk (state, refs ...)
bij complexe validaties - Oplossing? β TanStack Form !
- β Minder code voor hetzelfde resultaat
- β Onnodige re-rendering vermijden
- β Declaratieve syntax
- π Bijkomende dependency
- π Veel boilerplate voor kleine formulieren
React
TanStack Form


TanStack Form
Headless UI for building performant and type-safe forms
Waarom TanStack Form? π€
- TanStack ecosysteem: Query, Router ...
- TypeScript support
- Gelijkaardige syntax als React Hook Form

TanStack Form

Oefening
Oefening:
- Download tanstack-boilerplate.zip
- Uitpakken
npm i @tanstack/react-form
- Maak routes/index.tsx aan

Oefening


Oefening
Stap 1: maak het formulier in gewone HTML (JSX)


Oefening
Stap 2: useForm hook + beschrijf initiΓ«le waardes


Oefening
Stap 3: voorkom het standaardgedrag van <form>
π€ Wat is het standaardgedrag van <form> ?

Oefening
Stap 3: voorkom het standaardgedrag van <form>
π€ Wat is het standaardgedrag van <form> ?
- Bij verzenden: verstuurt een request naar de server
- Server antwoordt en de pagina laadt opnieuw
- βοΈ Wij willen dit gedrag voorkomen en het
verzenden asynchroon afhandelen (JavaScript)

Oefening
Stap 3: voorkom het standaardgedrag van <form>


Oefening
Stap 4: gebruik form.Field om de velden uit de
form-variabele toe te wijzen
- name-attribuut
- De naam die we gebruikten voor
defaultValue in form
- De naam die we gebruikten voor
- children-attribuut
- functie die JSX returnt om het veld te renderen

Oefening


Oefening
Stap 5: onSubmit functie toevoegen


Oefening
Stap 6: voor elk veld onChange en value implementeren, zodat TanStack Form altijd de laatste waardes heeft


Oefening


PGM3/6 - React: formulieren
By kareldesmet
PGM3/6 - React: formulieren
- 32