Curso react nivel medio
Introducción
En React, props (abreviatura de propiedades) son una forma de pasar datos de un componente padre a un componente hijo. Son como "argumentos" para una función en JavaScript, pero en este caso, se usan para personalizar y controlar los componentes.
¿Qué son las Props?
Las props son un objeto que contiene datos o funciones que el componente recibe como parámetros. Son de solo lectura, lo que significa que un componente no puede cambiar las props que recibe.
¿Cómo se usan las Props?
Se pasan como atributos en la etiqueta del componente.
1// Componente padre 2import React from "react"; 3 4function App() { 5 return ( 6 <div> 7 <Saludo nombre="María" /> 8 <Saludo nombre="Juan" /> 9 </div> 10 ); 11} 12 13// Componente hijo 14function Saludo(props) { 15 return <h1>¡Hola, {props.nombre}!</h1>; 16} 17 18export default App;
1<div id="app"></div>1import React, { useState } from "https://cdn.skypack.dev/react";
2import ReactDOM from "https://cdn.skypack.dev/react-dom";
3
4function Contador() {
5 // Definimos una variable de estado "contador" inicializada en 0
6 const [contador, setContador] = useState(0);
7
8 return (
9 <div>
10 <p>Contador: {contador}</p>
11 <button onClick={() => setContador(contador + 1)}>Incrementar</button>
12 </div>
13 );
14}
15
16function App(){
17 return <Contador/>
18}
19
20ReactDOM.render(<App />, document.getElementById('app'));Explicación
- En el componente padre
App, pasamosnombrecomo una prop al componenteSaludo. - En el componente hijo
Saludo, usamosprops.nombrepara acceder al valor de la prop.
El resultado será:
¡Hola, María!
¡Hola, Juan!
Props con Objetos y Funciones
También podemos pasar objetos, arrays o funciones como props.
1function App() { 2 const usuario = { nombre: "Carlos", edad: 25 }; 3 const mostrarMensaje = () => alert("Hola desde la función!"); 4 5 return ( 6 <div> 7 <Perfil datos={usuario} saludar={mostrarMensaje} /> 8 </div> 9 ); 10} 11 12function Perfil(props) { 13 return ( 14 <div> 15 <p>Nombre: {props.datos.nombre}</p> 16 <p>Edad: {props.datos.edad}</p> 17 <button onClick={props.saludar}>Saludar</button> 18 </div> 19 ); 20} 21 22export default App;
Explicación
- Pasamos el objeto
usuariocomo propdatosy la funciónmostrarMensajecomo propsaludar. - En el componente
Perfil, usamosprops.datos.nombre,props.datos.edady ejecutamos la funciónprops.saludaral hacer clic en el botón.
Desestructuración de Props
Para hacer el código más limpio, podemos desestructurar las props.
1function Perfil({ datos, saludar }) { 2 return ( 3 <div> 4 <p>Nombre: {datos.nombre}</p> 5 <p>Edad: {datos.edad}</p> 6 <button onClick={saludar}>Saludar</button> 7 </div> 8 ); 9}
Esto elimina la necesidad de escribir props. cada vez. El resultado será el mismo.
Props por Defecto
Podemos definir valores predeterminados para las props si no se pasan desde el componente padre.
1function Saludo({ nombre = "Invitado" }) { 2 return <h1>¡Hola, {nombre}!</h1>; 3} 4 5function App() { 6 return ( 7 <div> 8 <Saludo /> 9 <Saludo nombre="Ana" /> 10 </div> 11 ); 12} 13 14export default App;
Resultado
¡Hola, Invitado!
¡Hola, Ana!
Validación de Props con prop-types
Para asegurarnos de que las props son del tipo correcto, usamos la librería prop-types.
-
Instala la librería:
1npm install prop-types -
Usa
prop-typesen el componente:
1import PropTypes from "prop-types"; 2 3function Saludo({ nombre, edad }) { 4 return ( 5 <div> 6 <h1>¡Hola, {nombre}!</h1> 7 <p>Edad: {edad}</p> 8 </div> 9 ); 10} 11 12Saludo.propTypes = { 13 nombre: PropTypes.string.isRequired, 14 edad: PropTypes.number, 15}; 16 17export default Saludo;
string.isRequired:nombredebe ser una cadena y es obligatorio.number:edaddebe ser un número, pero es opcional.
Conclusión
Las props son esenciales en React porque permiten que los componentes sean reutilizables y dinámicos. Con ellas, puedes pasar datos y controlar el comportamiento de tus componentes de manera sencilla y eficiente.