React
React
S7. React
SUMARIO
7.1 Introducción a React
7.1.1 ¿Qué es React?
7.1.2 Ventajas de usar React
7.1.3 Breve historia y contexto
7.2 Configuración del entorno de desarrollo
7.2.1 Instalación de Node.js y npm
7.2.2 Creación de un proyecto de React utilizando Vite
7.2.3 Estructura de directorios típica de un proyecto de React
7.3 Componentes en React
7.3.1 Concepto de componentes
7.3.2 Creación de componentes funcionales y de clase
7.3.4 Propiedades (props) y estado (state)
7.3.5 Renderización de componentes
7.3.6 Comunicación entre Componentes
S7. React 1
7.4 JSX (JavaScript XML)
7.4.1 Introducción a JSX
7.4.2 Sintaxis de JSX
7.4.3 Renderización de elementos JSX en el DOM
7.5 Renderización condicional
7.5.1 Uso de condicionales en JSX
7.5.2 El operador ternario
7.5.3 Uso de if en expresiones JSX
7.6 Listas y Keys
7.6.1 Renderización de listas de elementos
7.6.2 Uso de la función map() para iterar sobre un array
7.6.3 Importancia de las keys en elementos iterados
7.7 Manejo de eventos
7.7.1 Asociación de eventos a elementos JSX
7.7.2 Manejo de eventos en componentes funcionales y de clase
7.7.3 Eventos comunes como onClick, onChange, etc.
7.8 State y Ciclo de Vida de los Componentes en React
S7. React 2
7.1 Introducción a React:
7.1.1 ¿Qué es React?
React es una biblioteca de JavaScript desarrollada por Facebook que se utiliza
para construir interfaces de usuario interactivas y reactivas. Es especialmente
adecuada para la creación de aplicaciones web de una sola página (SPA) y
aplicaciones de una sola página (PWA).
React se centra en la creación eficiente de componentes reutilizables y en la
gestión eficaz del estado de la aplicación. Lo que distingue a React de otros
marcos y bibliotecas es su enfoque en la manipulación eficiente del DOM virtual.
5. Compatibilidad con JSX: React permite el uso de JSX (JavaScript XML), una
sintaxis que combina JavaScript con HTML, lo que facilita la creación de
S7. React 3
componentes y la representación de la interfaz de usuario de manera más
declarativa y legible.
En 2015, Facebook lanzó oficialmente React Native, una extensión de React que
permite el desarrollo de aplicaciones móviles multiplataforma para iOS y Android
utilizando componentes de React. Esto amplió aún más la popularidad de React al
permitir a los desarrolladores utilizar las mismas habilidades y componentes para
construir aplicaciones web y móviles.
Hoy en día, React sigue siendo una de las bibliotecas de JavaScript más
populares y está respaldada por una comunidad activa y un equipo de desarrollo
dedicado. Su evolución constante y su capacidad para abordar desafíos
complejos en el desarrollo de interfaces de usuario lo convierten en una elección
sólida para los desarrolladores que buscan crear aplicaciones web modernas y
efectivas.
1. Instalación de Node.js:
S7. React 4
Ejecuta el instalador y sigue las instrucciones para completar la
instalación.
2. Verificación de la instalación:
node -v
npm -v
1. Instalación de Vite:
S7. React 5
3. Navegación al directorio del proyecto:
cd my-react-app
my-react-app/
├── node_modules/ # Dependencias del proyecto (generad
as automáticamente)
├── public/ # Archivos públicos (página HTML, im
ágenes, etc.)
│ ├── index.html # Página HTML principal
│ └── favicon.ico # Icono de la aplicación
├── src/ # Código fuente de la aplicación Rea
ct
│ ├── App.js # Componente principal de la aplicac
ión
│ ├── index.js # Punto de entrada de la aplicación
│ ├── assets/ # Archivos de recursos (imágenes, es
tilos, etc.)
│ └── components/ # Componentes de React
├── .gitignore # Archivo de configuración para Git
(opcional)
S7. React 6
├── package.json # Archivo de configuración de npm y
dependencias
├── README.md # Documentación del proyecto (opcion
al)
├── vite.config.js # Configuración de Vite
└── yarn.lock # Bloqueo de versiones de paquetes
(opcional, si usas Yarn)
S7. React 7
reutilización.
function MiComponenteFuncional(props) {
return <div>Hola, {props.nombre}</div>;
}
2. Componentes de clase:
S7. React 8
constructor(props) {
super(props);
this.state = { contador: 0 };
}
render() {
return (
<div>
Contador: {this.state.contador}
<button onClick={() => this.setState({ contador: t
his.state.contador + 1 })}>
Incrementar
</button>
</div>
);
}
}
Los componentes pueden acceder a sus props a través del objeto props .
function Saludo(props) {
return <div>Hola, {props.nombre}</div>;
}
S7. React 9
Estado (state):
render() {
return (
<div>
Contador: {this.state.contador}
<button onClick={() => this.setState({ contador: th
is.state.contador + 1 })}>
Incrementar
</button>
</div>
);
}
}
S7. React 10
7.3.5 Renderización de componentes
La renderización es el proceso de representar un componente en el DOM
(Documento Objeto Modelo).
En React, la función render() o el retorno de un componente funcional define
cómo se verá ese componente en la interfaz de usuario.
function Padre() {
const mensaje = 'Hola desde el componente padre';
function Hijo(props) {
return <p>{props.mensaje}</p>;
}
S7. React 11
En este ejemplo, el componente Padre pasa la prop mensaje al componente
Hijo , que lo muestra en su renderización.
function MiComponente(props) {
return <p>Nombre: {props.nombre}</p>;
}
function App() {
const [contador, setContador] = useState(0);
S7. React 12
};
return (
<div>
<p>Contador: {contador}</p>
<Hijo incrementarContador={incrementarContador} />
</div>
);
}
function Hijo(props) {
return (
<div>
<button onClick={props.incrementarContador}>Incremen
tar</button>
</div>
);
}
S7. React 13
7.4 JSX (JavaScript XML)
7.4.1 Introducción a JSX
JSX es una extensión de JavaScript utilizada en React para definir la estructura y
el contenido de la interfaz de usuario de manera declarativa. JSX combina
JavaScript con sintaxis similar a XML o HTML, lo que facilita la creación de
componentes de React y la representación visual de la interfaz de usuario. JSX es
una parte esencial de React y permite la creación de componentes de manera
más legible y mantenible.
S7. React 14
4. Elementos anidados: Los elementos JSX pueden anidarse dentro de otros
elementos JSX, creando así una estructura jerárquica de componentes. Por
ejemplo:
const lista = (
<ul>
<li>Elemento 1</li>
<li>Elemento 2</li>
</ul>
);
<div id="app"></div>
S7. React 15
import ReactDOM from 'react-dom';
ReactDOM.render(miElemento, document.getElementById('ap
p'));
function MiComponente(props) {
if (props.mostrarMensaje) {
return <div>Este mensaje se muestra si mostrarMensaje es
verdadero.</div>;
S7. React 16
} else {
return <div>Este mensaje se muestra si mostrarMensaje es
falso.</div>;
}
}
function MiComponente(props) {
return (
<div>
{props.mostrarMensaje ? (
<p>Este mensaje se muestra si mostrarMensaje es verda
dero.</p>
) : (
<p>Este mensaje se muestra si mostrarMensaje es fals
o.</p>
)}
</div>
);
}
S7. React 17
En este ejemplo, el operador ternario se utiliza para decidir qué elemento <p> se
renderizará según el valor de mostrarMensaje .
function MiComponente(props) {
return (
<div>
{props.mostrarMensaje && (
<p>Este mensaje se muestra si mostrarMensaje es verda
dero.</p>
)}
</div>
);
}
S7. React 18
En React, es común trabajar con listas de elementos, como elementos de una lista
desplegable, elementos de una tabla, publicaciones de blog o cualquier otro
conjunto de datos.
La renderización de listas y la iteración sobre un array de datos se realiza de
manera eficiente utilizando la función map() y es una parte fundamental del
desarrollo de aplicaciones React.
function ListaDeElementos(props) {
const elementos = props.datos.map((elemento, index) => (
<li key={index}>{elemento}</li>
));
return <ul>{elementos}</ul>;
}
S7. React 19
const nuevoArray = arrayOriginal.map((elemento, index) => {
// Operaciones o transformaciones en cada elemento
return nuevoElemento;
});
function ListaDeElementos(props) {
const elementos = props.datos.map((elemento, index) => (
<li key={elemento.id}>{elemento.nombre}</li>
));
return <ul>{elementos}</ul>;
}
S7. React 20
export default ListaDeElementos;
En este ejemplo, asumimos que cada elemento en el array props.datos tiene una
propiedad única llamada id , que utilizamos como key.
En resumen, la renderización de listas y la iteración sobre arrays son tareas
comunes en React, y la función map() es una herramienta poderosa para lograrlo
de manera eficiente. Además, asignar keys únicas a los elementos iterados es
esencial para garantizar un rendimiento óptimo y una actualización precisa de la
interfaz de usuario cuando los datos cambian.
function MiComponente() {
const handleClick = () => {
alert('Hiciste clic en el botón');
};
S7. React 21
return (
<button onClick={handleClick}>Haz clic aquí</button>
);
}
function MiComponente() {
const [mensaje, setMensaje] = useState(''); // Estado inici
al
return (
<div>
<p>{mensaje}</p>
<button onClick={handleClick}>Haz clic aquí</button>
</div>
);
}
S7. React 22
export default MiComponente;
Componentes de clase:
En componentes de clase, puedes definir métodos dentro de la clase que actúen
como manejadores de eventos. Asegúrate de enlazar el contexto del componente
apropiadamente usando bind o mediante el uso de funciones flecha para que
this haga referencia al componente.
handleClick() {
alert('Hiciste clic en el botón');
}
render() {
return (
<button onClick={this.handleClick}>Haz clic aquí</butto
n>
);
}
}
S7. React 23
onClick : Se dispara cuando se hace clic en un elemento, como un botón o un
enlace.
Estos son solo algunos ejemplos de eventos comunes en React. Puedes consultar
la documentación de React para obtener una lista completa de eventos y sus
descripciones.
En resumen, el manejo de eventos es esencial en React para crear aplicaciones
interactivas y responder a las acciones del usuario.
Puedes asociar eventos a elementos JSX y definir funciones o métodos para
manejar esos eventos. Ya sea en componentes funcionales o de clase, el manejo
de eventos es una parte fundamental del desarrollo de aplicaciones React.
S7. React 24
En los componentes de clase, puedes utilizar el método setState para actualizar el
estado de un componente. Este método acepta un objeto que representa el nuevo
estado y se utiliza para notificar a React que el componente debe volver a
renderizarse con el nuevo estado.
incrementarContador = () => {
this.setState({ contador: this.state.contador + 1 });
};
render() {
return (
<div>
<p>Contador: {this.state.contador}</p>
<button onClick={this.incrementarContador}>Incrementa
r</button>
</div>
);
}
}
S7. React 25
7.8.3 Ciclo de Vida de los Componentes de Clase
Los componentes de clase en React tienen un ciclo de vida que consta de varios
métodos que se ejecutan en momentos específicos durante la vida de un
componente. Algunos de los métodos de ciclo de vida más comunes son:
componentDidUpdate(prevProps, prevState) {
// Se ejecuta después de que el componente se ha actualiz
ado
console.log('El componente se ha actualizado.');
}
componentWillUnmount() {
// Se ejecuta antes de que el componente se desmonte
console.log('El componente se desmontará.');
}
render() {
S7. React 26
return (
<div>
<p>Ciclo de Vida del Componente</p>
</div>
);
}
}
S7. React 27
const [state, setState] = useState(initialState);
function Contador() {
// Inicializamos el estado "contador" en 0
const [contador, setContador] = useState(0);
return (
<div>
<p>Contador: {contador}</p>
<button onClick={incrementarContador}>Incrementar</butt
on>
</div>
);
}
S7. React 28
En este ejemplo, hemos creado un componente funcional llamado Contador que
utiliza useState() para inicializar el estado contador en 0. Luego, hemos definido
una función incrementarContador() que utiliza setContador() para aumentar el valor
del contador en 1 cada vez que se hace clic en el botón "Incrementar".
function Formulario() {
const [nombre, setNombre] = useState('');
const [email, setEmail] = useState('');
return (
<div>
<input type="text" placeholder="Nombre" value={nombre}
onChange={handleNombreChange} />
<input type="email" placeholder="Email" value={email} o
nChange={handleEmailChange} />
</div>
);
}
En este ejemplo, hemos creado un componente Formulario que utiliza dos estados
distintos: nombre y email . Cada uno de ellos tiene su propia función setNombre y
S7. React 29
setEmail para actualizar su valor.
S7. React 30