Introducción
En React, los componentes son las piezas fundamentales que componen una aplicación. Un componente en React es una función o una clase que opcionalmente acepta entradas (conocidas como "props") y devuelve un elemento de React que describe cómo debería aparecer una sección de la interfaz de usuario.
Conceptos Clave
- Componentes Funcionales: Son funciones de JavaScript que aceptan props como argumento y devuelven elementos de React.
- Componentes de Clase: Son clases de ES6 que extienden de
React.Component
y tienen un métodorender
que devuelve elementos de React. - Props: Son datos que se pasan a los componentes para que puedan utilizarlos.
- Estado (State): Es un objeto que representa la parte de la interfaz de usuario que puede cambiar con el tiempo.
Componentes Funcionales
Los componentes funcionales son la forma más sencilla de definir un componente en React. Aquí hay un ejemplo básico:
import React from 'react'; function Greeting(props) { return <h1>Hello, {props.name}!</h1>; } export default Greeting;
Explicación
Greeting
es un componente funcional que aceptaprops
como argumento.props.name
se utiliza para mostrar el nombre pasado al componente.- El componente devuelve un elemento JSX que representa un encabezado
<h1>
.
Componentes de Clase
Los componentes de clase son más complejos y se utilizan cuando se necesita manejar el estado o utilizar métodos del ciclo de vida. Aquí hay un ejemplo básico:
import React, { Component } from 'react'; class Greeting extends Component { render() { return <h1>Hello, {this.props.name}!</h1>; } } export default Greeting;
Explicación
Greeting
es una clase que extiendeReact.Component
.- El método
render
devuelve un elemento JSX. this.props.name
se utiliza para acceder a las props pasadas al componente.
Comparación entre Componentes Funcionales y de Clase
Característica | Componentes Funcionales | Componentes de Clase |
---|---|---|
Definición | Función de JavaScript | Clase de ES6 |
Manejo de Estado | Hooks (useState ) |
this.state |
Ciclo de Vida | Hooks (useEffect ) |
Métodos del ciclo de vida (componentDidMount , etc.) |
Simplicidad | Más simples | Más complejos |
Ejemplo Práctico
Vamos a crear una aplicación simple que utiliza tanto componentes funcionales como de clase.
Paso 1: Crear un Componente Funcional
// src/components/FunctionalComponent.js import React from 'react'; function FunctionalComponent(props) { return <p>This is a functional component. Message: {props.message}</p>; } export default FunctionalComponent;
Paso 2: Crear un Componente de Clase
// src/components/ClassComponent.js import React, { Component } from 'react'; class ClassComponent extends Component { render() { return <p>This is a class component. Message: {this.props.message}</p>; } } export default ClassComponent;
Paso 3: Utilizar los Componentes en la Aplicación Principal
// src/App.js import React from 'react'; import FunctionalComponent from './components/FunctionalComponent'; import ClassComponent from './components/ClassComponent'; function App() { return ( <div> <FunctionalComponent message="Hello from Functional Component!" /> <ClassComponent message="Hello from Class Component!" /> </div> ); } export default App;
Ejercicio Práctico
Ejercicio
- Crea un componente funcional llamado
UserCard
que aceptename
yage
como props y muestre esta información en un párrafo. - Crea un componente de clase llamado
UserProfile
que acepteusername
yemail
como props y muestre esta información en un párrafo. - Utiliza ambos componentes en tu aplicación principal (
App.js
).
Solución
Paso 1: Crear el Componente Funcional UserCard
// src/components/UserCard.js import React from 'react'; function UserCard(props) { return <p>Name: {props.name}, Age: {props.age}</p>; } export default UserCard;
Paso 2: Crear el Componente de Clase UserProfile
// src/components/UserProfile.js import React, { Component } from 'react'; class UserProfile extends Component { render() { return <p>Username: {this.props.username}, Email: {this.props.email}</p>; } } export default UserProfile;
Paso 3: Utilizar los Componentes en la Aplicación Principal
// src/App.js import React from 'react'; import UserCard from './components/UserCard'; import UserProfile from './components/UserProfile'; function App() { return ( <div> <UserCard name="John Doe" age={30} /> <UserProfile username="johndoe" email="[email protected]" /> </div> ); } export default App;
Conclusión
En esta lección, hemos aprendido sobre los componentes en React, incluyendo componentes funcionales y de clase. También hemos visto cómo pasar datos a los componentes utilizando props y cómo utilizar estos componentes en una aplicación React. En la próxima lección, exploraremos las diferencias entre componentes funcionales y de clase en mayor profundidad y aprenderemos sobre el manejo del estado en los componentes.
Curso de React
Módulo 1: Introducción a React
- ¿Qué es React?
- Configuración del Entorno de Desarrollo
- Hola Mundo en React
- JSX: Extensión de Sintaxis de JavaScript
Módulo 2: Componentes de React
- Entendiendo los Componentes
- Componentes Funcionales vs de Clase
- Props: Pasando Datos a Componentes
- State: Gestión del Estado del Componente
Módulo 3: Trabajando con Eventos
- Manejo de Eventos en React
- Renderizado Condicional
- Listas y Claves
- Formularios y Componentes Controlados
Módulo 4: Conceptos Avanzados de Componentes
- Elevando el Estado
- Composición vs Herencia
- Métodos del Ciclo de Vida de React
- Hooks: Introducción y Uso Básico
Módulo 5: Hooks de React
Módulo 6: Enrutamiento en React
Módulo 7: Gestión del Estado
- Introducción a la Gestión del Estado
- API de Contexto
- Redux: Introducción y Configuración
- Redux: Acciones y Reductores
- Redux: Conectando a React
Módulo 8: Optimización del Rendimiento
- Técnicas de Optimización del Rendimiento en React
- Memorización con React.memo
- Hooks useMemo y useCallback
- División de Código y Carga Perezosa
Módulo 9: Pruebas en React
- Introducción a las Pruebas
- Pruebas Unitarias con Jest
- Pruebas de Componentes con React Testing Library
- Pruebas de Extremo a Extremo con Cypress
Módulo 10: Temas Avanzados
- Renderizado del Lado del Servidor (SSR) con Next.js
- Generación de Sitios Estáticos (SSG) con Next.js
- TypeScript con React
- React Native: Creación de Aplicaciones Móviles