5.4--34. Nuestro primer Componente en React JS
Nuestro Primer Componente en React JS
https://codesandbox.io/p/sandbox/h8rt93
¡Ya tenemos nuestra aplicación de React levantada y abierta en nuestro editor de código! 🎉
Ahora vamos a crear nuestro primer componente y aprenderemos cómo estructurarlo correctamente, nombrarlo y añadirlo a nuestra aplicación.
Estructura de un Componente
1. Ubicación del Componente
Todo componente debe ir en la carpeta
src.Es una buena práctica crear una subcarpeta llamada
componentsdentro desrcpara organizar mejor nuestros componentes.
2. Nombre del Componente
¡Siempre debe empezar con mayúscula!
✅HolaMundo.js
❌holaMundo.js(incorrecto)
3. Estructura Básica
Un componente en React consta de tres partes principales:
a) Importaciones
import React from 'react';Aquí importamos librerías, estilos, imágenes u otros componentes.
b) Función del Componente
function HolaMundo() {
return (
<div>
<h1>Hola Mundo</h1>
<h2>Bienvenido a React</h2>
</div>
);
}La función debe tener el mismo nombre que el componente (por convención).
returnes obligatorio y debe devolver un solo elemento padre (puedes usar<div>o<Fragment>).
c) Exportación
export default HolaMundo;Permite que el componente sea reutilizable en otros archivos.
Cómo Usar el Componente
Para incluir nuestro componente en App.js:
Importamos el componente:
import HolaMundo from './components/HolaMundo';Lo usamos como etiqueta JSX:
function App() {
return (
<div>
<HolaMundo />
</div>
);
}Reglas Importantes
🔹 Solo un elemento padre en el return:
Si necesitas devolver múltiples elementos, envuélvelos en un <div> o <Fragment> (<> </>).
🔹 Exportación por defecto (export default):
Solo puede haber uno por archivo, pero puedes exportar otros componentes internos con export normal.
🔹 Los nombres de componentes siempre en mayúscula.
Ejemplo con Múltiples Componentes
Si creamos otro componente (AdiosMundo.js):
import React from 'react';
function AdiosMundo() {
return <h3>Adiós Mundo</h3>;
}
export default AdiosMundo;Y lo usamos en App.js:
import HolaMundo from './components/HolaMundo';
import AdiosMundo from './components/AdiosMundo';
function App() {
return (
<div>
<HolaMundo />
<AdiosMundo />
</div>
);
}¡Y listo! 🚀 Ahora ya sabes cómo crear y usar componentes en React. En próximos posts profundizaremos en props, estados y más.
¿Tienes dudas? ¡Déjalas en los comentarios! 👇
Creación y Uso de Componentes en React
📋 Tabla de Contenidos
🧩 ¿Qué son los Componentes?
Los componentes son bloques de construcción fundamentales en React. Son piezas reutilizables de código que definen cómo debe verse y comportarse una parte de la interfaz de usuario.
// Un componente simple
function Saludo() {
return <h1>¡Hola Mundo!</h1>;
}🔧 Tipos de Componentes
1. Componentes Funcionales (Recomendados)
// Componente funcional con función regular
function MiComponente() {
return <div>Hola desde componente funcional</div>;
}
// Componente funcional con arrow function
const MiComponente = () => {
return <div>Hola desde componente funcional</div>;
};2. Componentes de Clase (Legacy)
import React, { Component } from 'react';
class MiComponente extends Component {
render() {
return <div>Hola desde componente de clase</div>;
}
}🚀 Creación de Componentes
Estructura Básica de un Componente
// 1. Importar React (necesario en versiones anteriores a React 17)
import React from 'react';
// 2. Definir el componente
const MiComponente = () => {
// 3. Lógica del componente aquí
// 4. Retornar JSX
return (
<div className="mi-componente">
<h2>Mi Primer Componente</h2>
<p>¡Funciona correctamente!</p>
</div>
);
};
// 5. Exportar el componente
export default MiComponente;Uso del Componente
import MiComponente from './MiComponente';
function App() {
return (
<div>
<MiComponente />
<MiComponente />
<MiComponente />
</div>
);
}📤 Props (Propiedades)
Las props permiten pasar datos de un componente padre a un componente hijo.
Componente con Props
// Componente que recibe props
const TarjetaUsuario = ({ nombre, edad, email }) => {
return (
<div className="tarjeta-usuario">
<h3>{nombre}</h3>
<p>Edad: {edad}</p>
<p>Email: {email}</p>
</div>
);
};
// Uso del componente con props
function App() {
return (
<div>
<TarjetaUsuario
nombre="Ana García"
edad={28}
email="ana@ejemplo.com"
/>
<TarjetaUsuario
nombre="Carlos López"
edad={32}
email="carlos@ejemplo.com"
/>
</div>
);
}Props con Valores por Defecto
const Boton = ({ texto, color = "blue", tamaño = "medio" }) => {
const estilos = {
padding: tamaño === "grande" ? "15px 30px" : "10px 20px",
backgroundColor: color,
color: "white",
border: "none",
borderRadius: "5px",
cursor: "pointer"
};
return <button style={estilos}>{texto}</button>;
};
// Uso
<Boton texto="Click aquí" />
<Boton texto="Grande" color="red" tamaño="grande" />⚡ Estado (useState Hook)
El estado permite que los componentes almacenen y manejen datos que pueden cambiar.
import React, { useState } from 'react';
const Contador = () => {
// useState retorna un array: [valorActual, funciónParaActualizar]
const [contador, setContador] = useState(0);
const incrementar = () => {
setContador(contador + 1);
};
const decrementar = () => {
setContador(contador - 1);
};
const resetear = () => {
setContador(0);
};
return (
<div className="contador">
<h2>Contador: {contador}</h2>
<button onClick={incrementar}>+</button>
<button onClick={decrementar}>-</button>
<button onClick={resetear}>Reset</button>
</div>
);
};🔄 Ciclo de Vida (useEffect Hook)
useEffect permite ejecutar código en diferentes fases del ciclo de vida del componente.
import React, { useState, useEffect } from 'react';
const Reloj = () => {
const [hora, setHora] = useState(new Date());
// useEffect se ejecuta después de cada render
useEffect(() => {
const intervalo = setInterval(() => {
setHora(new Date());
}, 1000);
// Función de limpieza (se ejecuta al desmontar el componente)
return () => clearInterval(intervalo);
}, []); // Array de dependencias vacío = se ejecuta solo una vez
return (
<div>
<h2>Hora actual: {hora.toLocaleTimeString()}</h2>
</div>
);
};🎯 Manejo de Eventos
const FormularioContacto = () => {
const [formulario, setFormulario] = useState({
nombre: '',
email: '',
mensaje: ''
});
// Manejar cambios en los inputs
const manejarCambio = (e) => {
const { name, value } = e.target;
setFormulario(prevState => ({
...prevState,
[name]: value
}));
};
// Manejar envío del formulario
const manejarEnvio = (e) => {
e.preventDefault();
console.log('Datos del formulario:', formulario);
// Aquí iría la lógica para enviar los datos
};
return (
<form onSubmit={manejarEnvio}>
<div>
<label>Nombre:</label>
<input
type="text"
name="nombre"
value={formulario.nombre}
onChange={manejarCambio}
/>
</div>
<div>
<label>Email:</label>
<input
type="email"
name="email"
value={formulario.email}
onChange={manejarCambio}
/>
</div>
<div>
<label>Mensaje:</label>
<textarea
name="mensaje"
value={formulario.mensaje}
onChange={manejarCambio}
/>
</div>
<button type="submit">Enviar</button>
</form>
);
};🧱 Composición de Componentes
La composición permite crear componentes complejos a partir de componentes simples.
// Componentes pequeños y reutilizables
const Cabecera = ({ titulo }) => <header><h1>{titulo}</h1></header>;
const PieDePagina = ({ texto }) => <footer><p>{texto}</p></footer>;
const Contenido = ({ children }) => <main>{children}</main>;
// Componente principal que compone los demás
const Pagina = ({ titulo, children, textoPie }) => {
return (
<div className="pagina">
<Cabecera titulo={titulo} />
<Contenido>
{children}
</Contenido>
<PieDePagina texto={textoPie} />
</div>
);
};
// Uso
function App() {
return (
<Pagina
titulo="Mi Aplicación"
textoPie="© 2024 Mi Empresa"
>
<p>Este es el contenido principal de la página.</p>
<button>Click aquí</button>
</Pagina>
);
}💡 Ejemplo Práctico Completo
Lista de Tareas (Todo List)
import React, { useState } from 'react';
// Componente para mostrar cada tarea individual
const Tarea = ({ tarea, onEliminar, onToggleCompletada }) => {
return (
<div className={`tarea ${tarea.completada ? 'completada' : ''}`}>
<span
onClick={() => onToggleCompletada(tarea.id)}
style={{
textDecoration: tarea.completada ? 'line-through' : 'none',
cursor: 'pointer'
}}
>
{tarea.texto}
</span>
<button onClick={() => onEliminar(tarea.id)}>Eliminar</button>
</div>
);
};
// Componente para agregar nuevas tareas
const FormularioTarea = ({ onAgregarTarea }) => {
const [texto, setTexto] = useState('');
const manejarEnvio = (e) => {
e.preventDefault();
if (texto.trim()) {
onAgregarTarea(texto);
setTexto('');
}
};
return (
<form onSubmit={manejarEnvio}>
<input
type="text"
value={texto}
onChange={(e) => setTexto(e.target.value)}
placeholder="Nueva tarea..."
/>
<button type="submit">Agregar</button>
</form>
);
};
// Componente principal de la lista de tareas
const ListaTareas = () => {
const [tareas, setTareas] = useState([]);
const agregarTarea = (texto) => {
const nuevaTarea = {
id: Date.now(),
texto,
completada: false
};
setTareas([...tareas, nuevaTarea]);
};
const eliminarTarea = (id) => {
setTareas(tareas.filter(tarea => tarea.id !== id));
};
const toggleCompletada = (id) => {
setTareas(tareas.map(tarea =>
tarea.id === id
? { ...tarea, completada: !tarea.completada }
: tarea
));
};
const tareasCompletadas = tareas.filter(t => t.completada).length;
const totalTareas = tareas.length;
return (
<div className="lista-tareas">
<h2>Lista de Tareas</h2>
<p>
{tareasCompletadas} de {totalTareas} tareas completadas
({totalTareas > 0 ? Math.round((tareasCompletadas / totalTareas) * 100) : 0}%)
</p>
<FormularioTarea onAgregarTarea={agregarTarea} />
<div className="tareas">
{tareas.map(tarea => (
<Tarea
key={tarea.id}
tarea={tarea}
onEliminar={eliminarTarea}
onToggleCompletada={toggleCompletada}
/>
))}
</div>
</div>
);
};
export default ListaTareas;🎯 Mejores Prácticas
1. Nomenclatura
// ✅ Correcto - PascalCase
function MiComponente() { }
// ❌ Incorrecto
function miComponente() { }2. Un componente por archivo
// MiComponente.jsx
import React from 'react';
const MiComponente = () => {
return <div>Mi Componente</div>;
};
export default MiComponente;3. Props destructuring
// ✅ Mejor
const Usuario = ({ nombre, edad }) => { }
// ❌ Menos legible
const Usuario = (props) => {
const nombre = props.nombre;
const edad = props.edad;
}4. Keys en listas
const Lista = ({ items }) => {
return (
<ul>
{items.map(item => (
<li key={item.id}>{item.nombre}</li>
))}
</ul>
);
};📚 Conclusión
Los componentes son el corazón de React. Te permiten:
✅ Crear código reutilizable
✅ Mantener una estructura organizada
✅ Facilitar el mantenimiento
✅ Mejorar la legibilidad del código
¡Practica creando diferentes tipos de componentes y pronto dominarás esta poderosa característica de React! 🚀
Comentarios
Publicar un comentario