Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¿Qué es React?
React ofrece una serie de ventajas y beneficios que lo convierten en una opción
popular para el desarrollo frontend. A continuación, exploraremos algunas de las
principales ventajas de utilizar React:
2. Eficiencia del Virtual DOM: React utiliza un concepto llamado Virtual DOM (DOM
virtual) para actualizar eficientemente la interfaz de usuario. En lugar de
manipular directamente el DOM real del navegador, React realiza cambios en
una representación virtual del DOM y luego sincroniza estos cambios con el DOM
real. Esto minimiza las operaciones costosas de actualización del DOM y mejora
el rendimiento de la aplicación.
4. Comunidad activa y ecosistema rico: React cuenta con una comunidad activa
de desarrolladores y una amplia variedad de bibliotecas y herramientas
disponibles. Esto facilita la integración de React con otras tecnologías y permite
acceder a soluciones probadas para desafíos comunes en el desarrollo frontend.
Además, la documentación de React es amplia y detallada, lo que facilita el
aprendizaje y la resolución de problemas.
Estas son solo algunas de las ventajas clave de utilizar React en el desarrollo
frontend. A medida que avancemos en el curso, descubrirás más beneficios y
características poderosas de React que te ayudarán a construir aplicaciones
web interactivas y de alto rendimiento.
Aquí es donde entra en juego el Virtual DOM. El Virtual DOM es una representación
ligera y en memoria del DOM real. En lugar de actualizar directamente el DOM
real, React realiza cambios en el Virtual DOM y luego compara ese Virtual DOM
con el DOM real para determinar los cambios mínimos necesarios. Esta técnica
se conoce como reconciliación.
1. Eficiencia en las actualizaciones del DOM: Al trabajar con el Virtual DOM, React
realiza actualizaciones de manera más eficiente y reduce la cantidad de
manipulaciones directas del DOM real. Esto resulta en una mayor velocidad y
rendimiento de la aplicación.
¿Qué es JSX?
JSX es una sintaxis de plantillas en la que los elementos HTML se pueden escribir
directamente en archivos JavaScript. Combina la estructura y la semántica del
HTML con la potencia y flexibilidad de JavaScript.
1. Sintaxis familiar: JSX utiliza una sintaxis similar a HTML, lo que facilita la creación
de elementos y componentes de la interfaz de usuario. Si tienes experiencia con
HTML, te resultará familiar y fácil de entender.
En resumen, JSX es una extensión de sintaxis en React que permite escribir código
HTML similar a plantillas dentro de archivos JavaScript. JSX facilita la creación y
manipulación de elementos y componentes de la interfaz de usuario, mejorando
la legibilidad y mantenibilidad del código.
Componentes en React
En React, los componentes son la unidad básica de construcción de interfaces de
usuario. Pueden ser componentes de clase o componentes funcionales, y
encapsulan tanto la lógica como la interfaz de usuario de una parte específica
de una aplicación.
Elementos en React
Los elementos son la representación de los componentes en React. Un elemento
es una instancia inmutable de un componente y se utiliza para describir qué
debe mostrarse en la interfaz de usuario.
Creación de elementos: Una vez que has definido el componente App, puedes
crear elementos correspondientes a los elementos hijos que deseas renderizar.
Por ejemplo, puedes crear un elemento Header para el encabezado, un elemento
ItemList para la lista de elementos y un elemento Form para el formulario.
Renderizado del componente y elementos: A continuación, se realiza el
renderizado del componente App y los elementos correspondientes en la interfaz
de usuario. React convierte cada elemento en una representación en el DOM real
o en el Virtual DOM.
Este proceso de renderizado eficiente y diferencial es lo que hace que React sea
tan potente. En lugar de actualizar toda la interfaz de usuario en cada cambio,
React identifica y actualiza solo los componentes y elementos necesarios,
mejorando el rendimiento y la velocidad de la aplicación.
2. Componentes de orden superior (HOC): Los HOC son funciones que toman un
componente y devuelven un nuevo componente con funcionalidad adicional. Los
HOC permiten encapsular lógica compartida en un componente de alto nivel y
aplicarla a varios componentes diferentes.
Recuerda que a partir de React 16.8, los Hooks permiten que los componentes
funcionales tengan su propio estado interno y otras características previamente
limitadas a los componentes de clase. Esto ha llevado a un mayor uso de
componentes funcionales en React en comparación con las versiones anteriores.
JavaScript en ambos lados: Al utilizar JavaScript tanto en el lado del cliente como
en el servidor, los desarrolladores pueden utilizar las mismas habilidades y
conocimientos para escribir código en ambos entornos. Esto permite un flujo de
trabajo más coherente y eficiente.
Configuración de Node.js
Para configurar Node.js en tu entorno de desarrollo, sigue estos pasos:
Verificar la instalación: Una vez instalado, puedes verificar que Node.js esté
configurado correctamente abriendo la terminal y ejecutando los siguientes
comandos:
Puedes crear proyectos de Node.js utilizando herramientas como npm init o npx
create-react-app (para proyectos de React) para generar la estructura inicial de
tu proyecto.
Instalar Create React App: Abre la terminal y ejecuta el siguiente comando para
instalar Create React App globalmente en tu sistema:
Esto instalará Create React App para que puedas utilizarlo en cualquier proyecto
de React.
Herramientas adicionales
Además de la configuración básica, hay una variedad de herramientas y
extensiones útiles que puedes utilizar en tu entorno de desarrollo de React.
Algunas de ellas incluyen:
public: Esta carpeta contiene los archivos estáticos que se servirán tal cual al
navegador, como el archivo HTML principal (index.html). También puedes
agregar otros archivos estáticos, como imágenes, favicon, etc.
src: Esta carpeta contiene los archivos fuente de tu aplicación de React. Aquí es
donde desarrollarás la mayor parte de tu código.
function App() {
const tareas = [
{ id: 1, tarea: 'Terminar proyecto de React', completada:
false },
{ id: 2, tarea: 'Estudiar para el examen', completada: true },
{ id: 3, tarea: 'Hacer ejercicio', completada: false },
];
setTareas(nuevaListaTareas);
};
return (
<div>
<h1>Lista de Tareas</h1>
{tareas.map((tarea) => (
<Tarea
key={tarea.id}
tarea={tarea.tarea}
completada={tarea.completada}
marcarCompletada={() => marcarTareaCompletada(tarea.id)}
/>
))}
</div>
);
}
Dentro del retorno del componente App, utilizamos la función map para iterar
sobre la lista de tareas y renderizar un componente Tarea para cada tarea.
Pasamos las propiedades necesarias (tarea, completada y marcarCompletada)
al componente Tarea.
Las props son inmutables, lo que significa que una vez que se pasan al
componente, no se pueden modificar directamente desde dentro del
componente receptor. Esto asegura un flujo de datos unidireccional y ayuda a
mantener la integridad de los datos.
Si tienes una caja de texto que solo necesita enviar su valor al servidor cuando se
envía un formulario, y no necesitas realizar validaciones o cambios en tiempo
real, puedes optar por un componente no controlado. En este caso, no necesitas
almacenar el valor en el estado de React ni gestionar eventos de cambio.
Ejemplo práctico:
Utilizaremos el ejemplo de "Productos Destacados" para ilustrar los componentes
controlados y no controlados en un formulario de búsqueda de productos.
Dentro del componente de "ProductosDestacados", agregaremos un formulario
de búsqueda que permita al usuario buscar productos por su nombre.
Ejemplo práctico:
Utilizaremos el ejemplo de "Productos Destacados" para ilustrar cómo utilizar el
estado en React para implementar la funcionalidad de "Agregar a favoritos" a
cada producto.
Componentes de clase: Los componentes de clase son una forma más antigua
de definir componentes en React. En estos componentes, el estado se maneja
utilizando la propiedad state, que es un objeto especial que contiene los datos
que pueden cambiar en el componente. La manipulación del estado en
componentes de clase se realiza a través de la función setState, que es una
función proporcionada por React para actualizar el estado. Al llamar a setState,
React se encarga de fusionar los cambios y volver a renderizar el componente.
Ejemplo práctico:
Utilizaremos el ejemplo de "Productos Destacados" para ilustrar cómo manejar y
actualizar el estado en componentes de clase y funcionales.
Componente de clase:
Componente funcional:
En ambos ejemplos, hemos utilizado el mismo componente
"ProductosDestacados" y hemos implementado la funcionalidad de "Agregar a
favoritos". La diferencia radica en la forma en que se maneja y actualiza el
estado.
Ejemplo práctico:
Utilizaremos el ejemplo de "Productos Destacados" para ilustrar cómo la
actualización del estado afecta a la interfaz de usuario.
En este ejemplo, cada vez que se hace clic en el botón "Agregar a favoritos", se
actualiza el estado favoritos y React realiza una re-renderización del
componente. Como resultado, la lista de favoritos se actualiza automáticamente
en la interfaz de usuario para reflejar los cambios.
Ejemplo práctico:
Utilizaremos el ejemplo de "Productos Destacados" para ilustrar cómo aplicar el
levantamiento de estado en componentes padre e hijo.
Componente hijo:
En este ejemplo, hemos dividido el componente de "Productos Destacados" en
dos componentes: el componente padre "ProductosDestacadosPadre" y el
componente hijo "ProductosDestacadosHijo". El estado de los productos y la
función agregarFavorito se definen en el componente padre y se pasan como
props al componente hijo.
El ciclo de vida de los componentes de clase de React consta de tres fases clave:
montaje, actualización y desmontaje. Durante el montaje, el componente se crea
e inicializa; en la fase de actualización, el componente se modifica debido a
cambios en el estado o en las props; y durante el desmontaje, el componente es
eliminado del DOM.
Comprender cómo funcionan estas fases y cuándo se ejecutan los métodos del
ciclo de vida es fundamental para optimizar el rendimiento de nuestras
aplicaciones y garantizar que nuestras acciones se realicen en el momento
adecuado.
En este módulo, exploraremos en detalle cada una de las fases del ciclo de vida
de los componentes de clase. Aprenderemos cómo utilizar los métodos
correspondientes para realizar tareas específicas en cada etapa, y
comprenderemos la importancia de realizar limpieza y liberación de recursos
durante el desmontaje.
En React, los componentes de clase tienen un ciclo de vida que consiste en varias
fases importantes. Estas fases son:
Este ejemplo nos permitirá comprender cómo funcionan las diferentes fases del
ciclo de vida de los componentes de clase y cómo podemos aprovechar los
métodos relacionados para realizar tareas específicas en cada fase. En próximos
temas, seguiremos utilizando este ejemplo para explorar más sobre el ciclo de
vida y su aplicación en React.
1. componentDidMount():
Ciclo de Vida: Montaje
Uso: Se invoca inmediatamente después de que el componente es montado en
el DOM. Es el lugar ideal para realizar tareas de inicialización que requieren
acceso al DOM, como solicitudes a servidores externos o configuración de
suscripciones.
2. componentDidUpdate(prevProps, prevState):
Los Hooks son una característica de React introducida en la versión 16.8 que
permiten a los desarrolladores usar características de React como el estado y el
ciclo de vida en componentes funcionales, sin necesidad de escribir clases. Antes
de los Hooks, solo era posible utilizar el estado y otras características avanzadas
en componentes de clase, lo que a menudo llevaba a componentes más
complicados y difíciles de mantener.
Los Hooks proporcionan una forma más simple, concisa y efectiva de trabajar
con la lógica de los componentes en React. Al usar Hooks, los componentes
funcionales pueden contener su propio estado local, realizar efectos secundarios
y acceder al ciclo de vida de React. Esto permite a los desarrolladores escribir
componentes más legibles, reutilizables y fáciles de entender.
Los Hooks han revolucionado la forma en que se escribe React al permitir a los
desarrolladores crear componentes más funcionales, reutilizables y fáciles de
mantener. Han ganado una gran popularidad y se consideran una práctica
recomendada en el desarrollo de aplicaciones con React. Al usar Hooks, puedes
aprovechar al máximo las capacidades de React mientras mantienes un código
más limpio y conciso.
1. useState:
1. Reemplaza la clase con una función que retorne el JSX del componente.
2. Utiliza el Hook useState para declarar variables de estado y sus funciones
actualizadoras.
3. Utiliza el Hook useEffect para realizar efectos secundarios si es necesario.
Ejemplo: Conversión del Contador de Ciclo de Vida
En este ejemplo, hemos convertido el "Contador de Ciclo de Vida" de un
componente de clase a un componente funcional utilizando los Hooks useState y
useEffect. La funcionalidad y el ciclo de vida del contador siguen siendo los
mismos, pero el código es más claro, conciso y moderno gracias al nuevo
enfoque con Hooks. Esto simplifica el desarrollo y mejora el mantenimiento de
nuestros componentes en React.
¿Qué es el Enrutamiento?
⚠️ Anteriormente se utilizaba “Switch” para crear la estructura, sin embargo la
sintaxis ha cambiado ahora y se utiliza “Routes”. Es por esto que de
BrowserRouter importamos Routes (antes hubiera sido Switch)
El Contexto en React
Supongamos que tenemos una aplicación con tres páginas: "Inicio", "Acerca de" y
"Contacto". Para implementar el enrutamiento, necesitamos crear componentes
para cada una de estas páginas y configurar las rutas en nuestro componente
de enrutamiento.
En este ejemplo, hemos utilizado el componente BrowserRouter como el
enrutador principal y hemos definido tres rutas utilizando el componente Route.
Cuando el usuario navega a una de las rutas definidas, React Router renderizará
el componente correspondiente. El componente Link se utiliza para crear los
enlaces de navegación.
En el módulo anterior, aprendimos sobre React Router, una librería esencial para
gestionar la navegación y el enrutamiento en aplicaciones de React. Ahora, nos
adentraremos en algunos conceptos avanzados de React Router: cómo trabajar
con rutas dinámicas, cómo pasar parámetros a las rutas y cómo redirigir a otras
vistas dentro de nuestra aplicación.
En muchas aplicaciones, es común que las rutas no sean estáticas, sino que
contengan información variable, como identificadores únicos, nombres de
usuarios o cualquier otro dato relevante para la vista que se desea mostrar. En
React Router, podemos crear rutas dinámicas utilizando parámetros en las URL.
Estos parámetros se pueden acceder desde el componente de la ruta para
renderizar contenido específico según los datos proporcionados.
Redirecciones
En algunas situaciones, es posible que deseemos redirigir a los usuarios desde
una ruta específica a otra. Por ejemplo, podemos querer redirigir a los usuarios a
una página de inicio de sesión cuando intentan acceder a una página protegida
sin estar autenticados. React Router nos permite lograr esto utilizando el
componente Redirect.
Ejemplo de Redirección
Supongamos que tenemos una aplicación con una ruta protegida para el panel
de administración, y queremos redirigir a los usuarios a la página de inicio de
sesión si no están autenticados.
Redux
Context API
Al integrar React Router con Redux o Context API, podemos crear aplicaciones de
React más sofisticadas, eficientes y escalables. Esto nos permite tener un mayor
control sobre la gestión del estado y compartir datos entre diferentes
componentes sin necesidad de pasar props manualmente a través de cada
nivel.
Acciones
Receptor
El receptor es una función que se encarga de recibir las acciones y ejecutar las
tareas correspondientes. Dependiendo del tipo de acción recibida, el receptor
puede realizar cambios en el almacenamiento y emitir un evento para notificar a
los componentes de la interfaz de usuario sobre la actualización del estado.
Despachador
Almacenamiento (Store)
Flux puede implementarse utilizando tanto la Context API de React como Redux,
ya que ambos proporcionan mecanismos para manejar el flujo unidireccional de
datos. Ambos enfoques tienen sus propias ventajas y desventajas, y la elección
entre ellos dependerá de las necesidades específicas de la aplicación.
Ejemplo de Integración con Context API
Conclusión
Una vez instalado Axios, podemos realizar una solicitud GET a una API externa en
el componente que lo requiera:
Ejemplo de Integración con Fetch
Fetch es una función nativa de JavaScript que también puede ser utilizada para
realizar solicitudes HTTP a APIs externas:
Conclusión
Una vez que tenemos un token JWT válido, podemos usarlo para proteger ciertas
rutas en la aplicación de React. Podemos crear un componente de protección de
ruta que verifique si el usuario está autenticado antes de permitir el acceso a una
página protegida.
En este ejemplo, el componente ProtectedRoute recibe una prop isAuthenticated
que indica si el usuario está autenticado o no. Si el usuario está autenticado, se
renderiza el componente pasado como prop component, lo que permite el
acceso a la página protegida. Si el usuario no está autenticado, se redirige a la
página de inicio de sesión.
Conclusión