Props
Imagine que você está construindo um componente Greeting para um banner de boas-vindas, e cada visitante que faz login precisa ver seu próprio nome nele em vez de um nome único codificado para todos. Um componente que consegue renderizar apenas um valor fixo não consegue fazer isso sozinho. Props (abreviação de properties) são como você passa dados para um componente de fora, da mesma forma que um argumento passa um valor para uma função. Você escreve props em um componente da mesma forma que escreve atributos em uma tag HTML, e o componente as lê através de um único parâmetro.
function Greeting({ name }) {
return <h1>Olá, {name}</h1>
}
// uso: <Greeting name="Maria" />Greeting recebe uma prop, name. React reúne cada atributo que você escreve em <Greeting> em um único objeto e passa esse objeto como primeiro argumento do componente, então { name } aqui está desestruturando esse objeto para extrair o valor name diretamente. Chame <Greeting name="Maria" /> e name será "Maria" dentro da função. Chame novamente com um nome diferente e você obtém um heading diferente, do mesmo componente.
Props fluem em uma direção: de onde um componente é usado, para dentro do próprio componente. Dentro de Greeting, name se comporta como uma variável normal, mas o componente não consegue alterá-la: props são somente leitura. Se um componente precisa de dados que mudam ao longo do tempo, esse é um trabalho para state, que você verá em alguns capítulos adiante.
Valores padrão
Se uma prop pode estar ausente, dê a ela um padrão da mesma forma que você daria um padrão a qualquer parâmetro de função: um = no padrão de desestruturação.
function Greeting({ name = 'amigo' }) {
return <h1>Olá, {name}</h1>
}Chame <Greeting /> sem nenhuma prop name, e name volta ao padrão 'amigo'. Passe uma name, e ela sobrescreve o padrão. Essa é sintaxe JavaScript ordinária de parâmetro padrão, aplicada ao objeto que React passa para o componente.
A prop children
Alguns componentes precisam envolver outro conteúdo em vez de recebê-lo através de um atributo. Escreva conteúdo entre as tags de abertura e fechamento de um componente, e React o passa automaticamente como uma prop especial chamada children.
function Card({ children }) {
return <div className="card">{children}</div>
}
// uso:
// <Card>
// <p>Tudo o que vai aqui se torna a prop children do Card.</p>
// </Card>children funciona exatamente como qualquer outra prop: você a lê através do mesmo parâmetro desestruturado, e o componente decide onde renderizá-la. A única diferença é como ela chega, através do conteúdo das tags em vez de um atributo nomeado.
Passando qualquer valor JavaScript
Uma prop pode conter qualquer valor JavaScript: números, booleanos, objetos, arrays, até funções. Envolva o valor em chaves em vez de aspas.
function UserCard({ user, onSelect }) {
return <button onClick={() => onSelect(user.id)}>{user.name}</button>
}
// uso: <UserCard user={{ id: 1, name: 'Maria' }} onSelect={handleSelect} />user aqui é um objeto, e onSelect é uma função passada para baixo para que o componente possa chamá-la. O onClick do botão executa onSelect quando alguém clica nele, um event handler que o capítulo Events cobre completamente a seguir; confie por enquanto. É assim que componentes se comunicam: dados descem através de props, e comportamento desce do mesmo jeito, como uma função que o componente filho consegue chamar.
Props trazem dados para um componente de fora. Alguns capítulos adiante, state cobre como um componente segura e atualiza seus próprios dados ao longo do tempo.
{ name }, e um componente nunca muda as props que recebe. Dê a uma um valor padrão com = quando ela pode estar ausente, e lembre-se que tudo o que você coloca entre as tags de um componente chega como sua prop children. Próximo: Lists and keys, onde um componente renderiza todo um array de dados.

