10-5-formulario
Formulario para Agregar Nombres a un Arreglo
Aquí tienes un ejemplo muy simple usando React con functional components y hooks:
Paso 1: Crear el componente ListaNombres.js
import { useState } from 'react';
function ListaNombres() {
// 1. Estado inicial con 3 nombres
const [nombres, setNombres] = useState(['Juan', 'María', 'Carlos']);
const [nuevoNombre, setNuevoNombre] = useState('');
// 2. Función para agregar un nuevo nombre
const agregarNombre = (e) => {
e.preventDefault(); // Evita que se recargue la página
if (nuevoNombre.trim() !== '') {
// Actualizamos el estado agregando el nuevo nombre
setNombres([...nombres, nuevoNombre.trim()]);
setNuevoNombre(''); // Limpiamos el input
}
};
return (
<div>
<h1>Lista de Nombres</h1>
{/* Formulario para agregar nombres */}
<form onSubmit={agregarNombre}>
<input
type="text"
value={nuevoNombre}
onChange={(e) => setNuevoNombre(e.target.value)}
placeholder="Escribe un nombre"
required
/>
<button type="submit">Agregar</button>
</form>
{/* Lista de nombres */}
<ul>
{nombres.map((nombre, index) => (
<li key={index}>{nombre}</li>
))}
</ul>
</div>
);
}
export default ListaNombres;Paso 2: Usar el componente en tu aplicación
En tu archivo principal (por ejemplo App.js):
import ListaNombres from './ListaNombres';
function App() {
return (
<div className="App">
<ListaNombres />
</div>
);
}
export default App;Explicación paso a paso:
Estado inicial: Usamos
useStatepara crear:nombres: El arreglo que contiene los nombres (inicializado con 3 nombres)nuevoNombre: El valor del input para agregar nuevos nombres
Función
agregarNombre:Se ejecuta al enviar el formulario
Evita el comportamiento por defecto del formulario
Verifica que el nombre no esté vacío
Actualiza el estado agregando el nuevo nombre
Limpia el input
Renderizado:
El formulario con un input controlado (su valor está enlazado al estado)
Una lista (
ul) que muestra todos los nombres usandomap
Key en la lista: Usamos el índice como
key(en una aplicación real con IDs únicos sería mejor usar esos IDs)
¿Cómo funciona?
Cuando escribes en el input,
onChangeactualiza el estadonuevoNombreCuando envías el formulario:
Se llama a
agregarNombreSe agrega el nuevo nombre al arreglo
React detecta el cambio de estado y vuelve a renderizar el componente mostrando la lista actualizada
Este ejemplo es muy básico pero contiene los fundamentos de React:
Estado (
useState)Renderizado condicional
Listas y keys
Formularios controlados
ListaNombres.js
import { useState } from 'react';
// 1. Definimos los nombres iniciales FUERA del componente
const nombresIniciales = ['Juan', 'María', 'Carlos'];
function ListaNombres() {
// 2. Usamos el arreglo externo como valor inicial del estado
const [nombres, setNombres] = useState(nombresIniciales);
const [nuevoNombre, setNuevoNombre] = useState('');
const agregarNombre = (e) => {
e.preventDefault();
if (nuevoNombre.trim() !== '') {
setNombres([...nombres, nuevoNombre.trim()]);
setNuevoNombre('');
}
};
return (
<div>
<h1>Lista de Nombres</h1>
<form onSubmit={agregarNombre}>
<input
type="text"
value={nuevoNombre}
onChange={(e) => setNuevoNombre(e.target.value)}
placeholder="Escribe un nombre"
required
/>
<button type="submit">Agregar</button>
</form>
<ul>
{nombres.map((nombre, index) => (
<li key={index}>{nombre}</li>
))}
</ul>
</div>
);
}
export default ListaNombres;App.js (igual que antes)
import ListaNombres from './ListaNombres';
function App() {
return (
<div className="App">
<ListaNombres />
</div>
);
}
export default App;¿Qué cambió respecto a la versión anterior?
Arreglo externo: Ahora
nombresInicialesestá definido fuera del componenteconst nombresIniciales = ['Juan', 'María', 'Carlos'];Estado inicial: Se usa este arreglo externo para inicializar el estado
const [nombres, setNombres] = useState(nombresIniciales);
Ventajas de este enfoque:
Separación de datos y lógica: Los datos iniciales están separados de la lógica del componente
Reutilización: Puedes usar el mismo arreglo inicial en otros componentes si es necesario
Más claro: Para algunos desarrolladores, esta separación hace el código más legible
Comentarios
Publicar un comentario