Skip to content

Props (Propriedades)

As Props são a forma como passamos dados de um componente pai para um componente filho. Elas são imutáveis (read-only) do ponto de vista do componente que as recebe.


Como usar?

No React, as props são passadas como atributos para os componentes e recebidas como o primeiro argumento da função do componente.

Exemplo de Uso:

tsx
// Componente Filho
function WelcomeMessage({ name, isAdmin }: { name: string; isAdmin: boolean }) {
  return (
    <View>
      <Text>Olá, {name}!</Text>
      {isAdmin && <Text>(Administrador)</Text>}
    </View>
  );
}

// Componente Pai
function App() {
  return <WelcomeMessage name="João" isAdmin={true} />;
}

Quando usar?

  1. Configuração de Componentes: Definir variantes de estilo (type="primary"), tamanhos (size="large") ou rótulos.
  2. Passagem de Dados: Enviar informações buscadas da API para componentes de visualização.
  3. Callbacks de Eventos: Passar funções para que o filho avise ao pai sobre interações (onPress, onChange).
  4. Composição (Slots): Usar a prop children ou slots específicos para injetar conteúdo.

Quando NÃO usar?

  1. Prop Drilling Excessivo: Se você está passando a mesma prop por 5 níveis de componentes que não a utilizam, considere usar um Contexto ou estado global (Redux/TanStack Query).
  2. Dados que mudam muito rápido: Evite passar estados de animação ou scrolls via props em árvores profundas sem memorização, pois isso causará re-renderizações em toda a cadeia.

Melhores Práticas

  • Use Function: Sempre declare seus componentes como funções nomeadas (function MyComponent()).
  • Destruturação: Sempre destruture as props no argumento da função para facilitar a leitura e definir valores padrão.
    • Bom: function Button({ label = 'Ok' }) { ... }
    • Ruim: function Button(props) { ... }
  • Tipagem (TypeScript): Sempre defina uma interface ou type para as props. Isso evita bugs de "undefined" e melhora o autocomplete.
  • Slot Components: Para layouts complexos, prefira usar props que aceitam componentes (header={<Header />}) em vez de dezenas de props booleanas.