Introducció
En aquest tema, aprendrem com gestionar formularis en React utilitzant components controlats. Els components controlats són aquells en què el formulari de dades és gestionat pel component React. Això significa que l'estat del formulari és mantingut en el component i actualitzat a mesura que l'usuari interactua amb el formulari.
Conceptes clau
- Components controlats: Components en què l'estat del formulari és gestionat pel component React.
- Components no controlats: Components en què l'estat del formulari és gestionat pel DOM.
- Gestió de l'estat: Utilització de l'estat del component per mantenir els valors dels camps del formulari.
- Esdeveniments de formulari: Maneig d'esdeveniments com
onChange
ionSubmit
per actualitzar l'estat i gestionar l'enviament del formulari.
Exemples pràctics
Exemple bàsic de component controlat
A continuació, es mostra un exemple bàsic d'un formulari amb un camp de text controlat per l'estat del component.
import React, { useState } from 'react'; function ControlledForm() { const [name, setName] = useState(''); const handleChange = (event) => { setName(event.target.value); }; const handleSubmit = (event) => { event.preventDefault(); alert(`El nom introduït és: ${name}`); }; return ( <form onSubmit={handleSubmit}> <label> Nom: <input type="text" value={name} onChange={handleChange} /> </label> <button type="submit">Enviar</button> </form> ); } export default ControlledForm;
Explicació del codi
-
Importació i inicialització de l'estat:
import React, { useState } from 'react'; const [name, setName] = useState('');
Utilitzem el hook
useState
per crear una variable d'estatname
i una funciósetName
per actualitzar-la. -
Gestió del canvi:
const handleChange = (event) => { setName(event.target.value); };
La funció
handleChange
s'executa cada vegada que l'usuari escriu en el camp de text, actualitzant l'estatname
amb el valor actual del camp. -
Gestió de l'enviament:
const handleSubmit = (event) => { event.preventDefault(); alert(`El nom introduït és: ${name}`); };
La funció
handleSubmit
s'executa quan el formulari és enviat. Evita el comportament per defecte del formulari (que és recarregar la pàgina) i mostra una alerta amb el valor dename
. -
Renderització del formulari:
return ( <form onSubmit={handleSubmit}> <label> Nom: <input type="text" value={name} onChange={handleChange} /> </label> <button type="submit">Enviar</button> </form> );
El formulari conté un camp de text i un botó d'enviament. El valor del camp de text està lligat a l'estat
name
, i l'esdevenimentonChange
actualitza aquest estat.
Exercicis pràctics
Exercici 1: Formulari amb múltiples camps
Crea un formulari controlat amb els següents camps:
- Nom
- Correu electrònic
- Missatge
Quan l'usuari enviï el formulari, mostra una alerta amb els valors introduïts.
Solució
import React, { useState } from 'react'; function MultiFieldForm() { const [formData, setFormData] = useState({ name: '', email: '', message: '' }); const handleChange = (event) => { const { name, value } = event.target; setFormData({ ...formData, [name]: value }); }; const handleSubmit = (event) => { event.preventDefault(); alert(`Nom: ${formData.name}\nCorreu electrònic: ${formData.email}\nMissatge: ${formData.message}`); }; return ( <form onSubmit={handleSubmit}> <label> Nom: <input type="text" name="name" value={formData.name} onChange={handleChange} /> </label> <br /> <label> Correu electrònic: <input type="email" name="email" value={formData.email} onChange={handleChange} /> </label> <br /> <label> Missatge: <textarea name="message" value={formData.message} onChange={handleChange} /> </label> <br /> <button type="submit">Enviar</button> </form> ); } export default MultiFieldForm;
Explicació del codi
-
Inicialització de l'estat:
const [formData, setFormData] = useState({ name: '', email: '', message: '' });
Utilitzem un objecte per mantenir l'estat de múltiples camps del formulari.
-
Gestió del canvi:
const handleChange = (event) => { const { name, value } = event.target; setFormData({ ...formData, [name]: value }); };
La funció
handleChange
actualitza l'estat corresponent al camp que ha canviat. -
Gestió de l'enviament:
const handleSubmit = (event) => { event.preventDefault(); alert(`Nom: ${formData.name}\nCorreu electrònic: ${formData.email}\nMissatge: ${formData.message}`); };
La funció
handleSubmit
mostra una alerta amb els valors dels camps del formulari. -
Renderització del formulari:
return ( <form onSubmit={handleSubmit}> <label> Nom: <input type="text" name="name" value={formData.name} onChange={handleChange} /> </label> <br /> <label> Correu electrònic: <input type="email" name="email" value={formData.email} onChange={handleChange} /> </label> <br /> <label> Missatge: <textarea name="message" value={formData.message} onChange={handleChange} /> </label> <br /> <button type="submit">Enviar</button> </form> );
Errors comuns i consells
-
Oblidar-se de lligar l'estat al valor del camp:
- Assegura't que el valor del camp del formulari està lligat a l'estat del component.
- Exemple:
<input type="text" value={name} onChange={handleChange} />
-
No gestionar l'esdeveniment
onChange
:- Sense la funció
handleChange
, l'estat del component no s'actualitzarà. - Exemple:
const handleChange = (event) => { setName(event.target.value); };
- Sense la funció
-
No evitar el comportament per defecte del formulari:
- Utilitza
event.preventDefault()
en la funcióhandleSubmit
per evitar que la pàgina es recarregui.
- Utilitza
Resum
En aquesta secció, hem après com gestionar formularis en React utilitzant components controlats. Hem vist com utilitzar l'estat del component per mantenir els valors dels camps del formulari i com gestionar els esdeveniments de canvi i enviament. També hem practicat amb un exemple bàsic i un exercici amb múltiples camps. Ara estem preparats per avançar cap a conceptes més avançats en React.
Curs de React
Mòdul 1: Introducció a React
- Què és React?
- Configuració de l'entorn de desenvolupament
- Hola Món en React
- JSX: Extensió de la sintaxi de JavaScript
Mòdul 2: Components de React
- Comprendre els components
- Components funcionals vs components de classe
- Props: Passar dades als components
- State: Gestionar l'estat del component
Mòdul 3: Treballar amb esdeveniments
- Gestionar esdeveniments en React
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Conceptes avançats de components
- Elevar l'estat
- Composició vs herència
- Mètodes del cicle de vida de React
- Hooks: Introducció i ús bàsic
Mòdul 5: Hooks de React
Mòdul 6: Enrutament en React
Mòdul 7: Gestió de l'estat
- Introducció a la gestió de l'estat
- API de context
- Redux: Introducció i configuració
- Redux: Accions i reductors
- Redux: Connexió amb React
Mòdul 8: Optimització del rendiment
- Tècniques d'optimització del rendiment de React
- Memorització amb React.memo
- Hooks useMemo i useCallback
- Divisió de codi i càrrega mandrosa
Mòdul 9: Proves en React
- Introducció a les proves
- Proves unitàries amb Jest
- Proves de components amb React Testing Library
- Proves de punta a punta amb Cypress
Mòdul 10: Temes avançats
- Renderització del costat del servidor (SSR) amb Next.js
- Generació de llocs estàtics (SSG) amb Next.js
- TypeScript amb React
- React Native: Construir aplicacions mòbils