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

  1. Components controlats: Components en què l'estat del formulari és gestionat pel component React.
  2. Components no controlats: Components en què l'estat del formulari és gestionat pel DOM.
  3. Gestió de l'estat: Utilització de l'estat del component per mantenir els valors dels camps del formulari.
  4. Esdeveniments de formulari: Maneig d'esdeveniments com onChange i onSubmit 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

  1. Importació i inicialització de l'estat:

    import React, { useState } from 'react';
    const [name, setName] = useState('');
    

    Utilitzem el hook useState per crear una variable d'estat name i una funció setName per actualitzar-la.

  2. 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'estat name amb el valor actual del camp.

  3. 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 de name.

  4. 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'esdeveniment onChange 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

  1. Inicialització de l'estat:

    const [formData, setFormData] = useState({
      name: '',
      email: '',
      message: ''
    });
    

    Utilitzem un objecte per mantenir l'estat de múltiples camps del formulari.

  2. 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.

  3. 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.

  4. 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

  1. 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} />
  2. No gestionar l'esdeveniment onChange:

    • Sense la funció handleChange, l'estat del component no s'actualitzarà.
    • Exemple: const handleChange = (event) => { setName(event.target.value); };
  3. No evitar el comportament per defecte del formulari:

    • Utilitza event.preventDefault() en la funció handleSubmit per evitar que la pàgina es recarregui.

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

Mòdul 2: Components de React

Mòdul 3: Treballar amb esdeveniments

Mòdul 4: Conceptes avançats de components

Mòdul 5: Hooks de React

Mòdul 6: Enrutament en React

Mòdul 7: Gestió de l'estat

Mòdul 8: Optimització del rendiment

Mòdul 9: Proves en React

Mòdul 10: Temes avançats

Mòdul 11: Projecte: Construir una aplicació completa

© Copyright 2024. Tots els drets reservats