Props
Imagina que estás construyendo un componente Greeting para un banner de bienvenida, y cada visitante que inicia sesión necesita ver su propio nombre en lugar de un nombre único para todos. Un componente que solo puede renderizar un valor fijo no puede hacer eso por sí solo. Props (abreviatura de properties) es cómo pasas datos a un componente desde afuera, de la misma manera que un argumento pasa un valor a una función. Los props se escriben en un componente igual que los atributos en una etiqueta HTML, y el componente los lee a través de un único parámetro.
function Greeting({ name }) {
return <h1>Hola, {name}</h1>
}
// uso: <Greeting name="María" />Greeting recibe un prop, name. React recopila todos los atributos que escribes en <Greeting> en un único objeto y lo pasa como el primer argumento del componente, así que { name } aquí está desestructurando ese objeto para extraer el valor name directamente. Llama a <Greeting name="María" /> y name será "María" dentro de la función. Llámalo de nuevo con un nombre diferente y obtendrás un encabezado diferente, del mismo componente.
Los props fluyen en una dirección: desde donde se usa un componente, hacia adentro del componente. Dentro de Greeting, name se comporta como una variable normal, pero el componente no puede cambiarla: los props son de solo lectura. Si un componente necesita datos que cambien con el tiempo, eso es trabajo para state, que cubriremos algunos capítulos adelante.
Valores por defecto
Si un prop podría estar ausente, dale un valor por defecto igual que le darías a cualquier parámetro de función: un = en el patrón de desestructuración.
function Greeting({ name = 'amigo' }) {
return <h1>Hola, {name}</h1>
}Llama a <Greeting /> sin el prop name y name volverá a 'amigo'. Pasa un name y anulará el valor por defecto. Esta es la sintaxis ordinaria de parámetros por defecto de JavaScript, aplicada al objeto que React le entrega al componente.
El prop children
Algunos componentes necesitan envolver otro contenido en lugar de recibirlo a través de un atributo. Escribe contenido entre las etiquetas de apertura y cierre de un componente, y React lo pasa automáticamente como un prop especial llamado children.
function Card({ children }) {
return <div className="card">{children}</div>
}
// uso:
// <Card>
// <p>Lo que escribas aquí se convierte en el prop children de Card.</p>
// </Card>children funciona exactamente como cualquier otro prop: lo lees a través del mismo parámetro desestructurado, y el componente decide dónde renderizarlo. La única diferencia es cómo llega, a través del contenido de las etiquetas en lugar de un atributo nombrado.
Pasar cualquier valor de JavaScript
Un prop puede contener cualquier valor de JavaScript: números, booleanos, objetos, arrays, incluso funciones. Envuelve el valor entre llaves en lugar de comillas.
function UserCard({ user, onSelect }) {
return <button onClick={() => onSelect(user.id)}>{user.name}</button>
}
// uso: <UserCard user={{ id: 1, name: 'María' }} onSelect={handleSelect} />user aquí es un objeto, y onSelect es una función pasada hacia abajo para que el componente pueda llamarla. El onClick del botón ejecuta onSelect cuando alguien hace clic, un manejador de eventos que el capítulo Events cubre en detalle a continuación; tómalo por ahora como algo confiable. Así es cómo se comunican los componentes: los datos bajan a través de los props, y el comportamiento viaja del mismo modo, como una función que el componente hijo puede llamar.
Los props introducen datos a un componente desde afuera. Algunos capítulos adelante, state cubre cómo un componente mantiene y actualiza sus propios datos con el tiempo.
{ name }, y un componente nunca cambia los props que recibe. Dale a uno un valor por defecto con = cuando podría estar ausente, y recuerda que todo lo que pongas entre las etiquetas de un componente llega como su prop children. Siguiente: Lists and keys, donde un componente renderiza un array completo de datos.

