Entender a diferença entre props e state no React é fundamental. Muita gente se confunde na hora de passar dados entre componentes, deixando o código confuso e `undefined`. Neste post, eu te explico de forma clara como usar cada um deles para organizar suas aplicações.
Desmistificando o React: Props e State
Vamos falar a real sobre React: props e state são os pilares para construir interfaces dinâmicas. Pense em props como informações que um componente “recebe” de cima, como argumentos em uma função. Elas são imutáveis dentro do componente que as recebe. Já o state é algo que o próprio componente “gerencia” internamente. É a memória dele, usada para guardar dados que podem mudar ao longo do tempo e que, quando alterados, fazem o componente se atualizar na tela.
Dominar essa diferença é crucial. Props são ótimas para passar dados de um componente pai para um filho, garantindo que os dados fluam de forma previsível. State, por outro lado, é essencial para qualquer coisa que precisa de atualização: um contador, o estado de um formulário, ou se um menu está aberto ou fechado. É o que dá vida e interatividade aos seus componentes.
Confira este vídeo relacionado para mais detalhes:
A Dança dos Dados: Entendendo Props e State em React

Props: A Comunicação Clara entre Componentes
Vamos falar sobre como os componentes no React “conversam” entre si. A principal forma de passar informações de um componente pai para um componente filho são as “props”. Pense nelas como argumentos que você passa para uma função. O componente pai decide quais dados enviar, e o componente filho apenas recebe e utiliza esses dados. É uma via de mão única, o que garante que seu código fique mais organizado e previsível.

Agora, a grande diferença: “state”. Enquanto props são dados que vêm de fora do componente, state é o “estado interno” do próprio componente. Imagine um botão que muda de cor quando clicado. Essa mudança de cor é gerenciada pelo state. O state é onde você armazena informações que podem mudar com o tempo, como dados de um formulário, o resultado de uma busca ou a visibilidade de um elemento. A atualização do state é o que faz o componente “reagir” e se redesenhar na tela.
Para deixar bem claro: props são para comunicação de pai para filho, são imutáveis para o filho (ele não pode mudar o que recebeu). State é sobre gerenciar informações que pertencem ao próprio componente e que podem ser alteradas. É fundamental entender essa distinção para construir interfaces dinâmicas e com lógica clara.
Dica Prática: Se um dado precisa ser compartilhado entre vários componentes e pode mudar, é melhor que ele esteja no “estado” do componente mais próximo que é pai de todos eles, e aí sim, você passa esse dado como “props” para os filhos que precisam dele.

State: A Memória Interna dos seus Componentes
Imagina um botão que conta quantos cliques ele recebeu. Esse contador? É o `state`. Cada vez que você clica, o `state` muda, e o React atualiza a tela para mostrar o novo número. As `props`, por outro lado, são como configurações que você recebe de fora e que geralmente não mudam por si só dentro do componente. O `state` é dinâmico, as `props` são mais estáticas.

Quando você fala em `state` no React, está falando sobre dados que pertencem ao componente e que podem ser alterados. Essa alteração é o que faz a mágica acontecer: o React percebe a mudança e renderiza novamente o componente com a nova informação. Se você tem um formulário, os valores que o usuário digita em cada campo, enquanto ele está digitando, são gerenciados pelo `state` desse componente de formulário.
A principal diferença para as `props` é que o `state` é gerenciado internamente pelo componente, enquanto as `props` vêm de fora, geralmente do componente pai. Muda o `state` e o componente reage. Recebe uma `prop` nova e, se ela for diferente da anterior, o componente reage. É o `state` que permite que um componente seja interativo e responda às ações do usuário ou a outros eventos. Saber quando usar `state` e `props` é fundamental para construir interfaces eficientes.
Dica Prática: Use `state` para dados que mudam com o tempo e afetam a interface. Use `props` para passar dados que um componente pai envia para um filho e que não são alterados pelo próprio filho.

Como os Props São Passados: Via de Mão Única


Quando Usar Props: Informação Externa para o Componente
Muita gente se confunde com `props` e `state` no React. Pensa assim: `props` são como “argumentos” que você passa para um componente. É a informação que vem de fora, de um componente pai, para o componente filho. Ele recebe esses dados e os exibe ou usa, mas não pode modificar diretamente o que recebeu. É algo que ele consome, não que ele altera.

Agora, o `state` é diferente. O `state` é a memória interna do seu componente. É a informação que ele mesmo gerencia e pode mudar com o tempo, em resposta a ações do usuário, por exemplo. Quando o `state` de um componente muda, o React sabe que precisa atualizar a tela para refletir essa nova informação. É o que faz um componente ser dinâmico.
A grande sacada é essa: `props` são para passar dados para baixo na árvore de componentes, de pai para filho. `State` é para gerenciar dados que são internos e podem mudar dentro do próprio componente. Usar isso certo é a chave para componentes reutilizáveis e fáceis de entender. A gente vê muito essa confusão quando alguém tenta modificar uma prop diretamente, e aí a aplicação não funciona como esperado. O `state` é a ferramenta certa para dados que mudam.
Dica Prática: Se a informação precisa vir de fora do componente e não vai mudar lá dentro, use `props`. Se o componente precisa gerenciar e alterar alguma informação dele mesmo ao longo do tempo, aí sim, pense em `state`.

Alterando o State: A Dinâmica Interna que Muda a Tela
Você já parou pra pensar em como um aplicativo no seu celular ou um site que você visita muda a informação na tela sem você precisar recarregar tudo? No React, isso acontece muito por causa de duas coisas principais: as `props` e o `state`. Pense nas `props` como um bilhete que você passa para um componente filho. Ele recebe essa informação, mas não pode mudar nada nela. É como um presente que você dá: a pessoa recebe, mas não pode modificar o presente em si. Já o `state` é a memória interna de um componente. É ali que ele guarda informações que podem mudar com o tempo, e quando isso acontece, o React sabe que precisa atualizar o que você está vendo.

A diferença fundamental entre `props` e `state` no React está no controle. As `props` são passadas de um componente pai para um filho, e o filho só pode lê-las, não alterá-las. É um fluxo unidirecional, garantindo que o componente pai mantenha o controle. O `state`, por outro lado, é gerenciado *dentro* do próprio componente. Quando o `state` de um componente muda, o React automaticamente “renderiza” esse componente novamente, mostrando as atualizações para você. É como se o componente tivesse um controle remoto interno para mudar sua própria aparência ou comportamento.
Vamos combinar, entender essa dinâmica é crucial para criar interfaces reativas. As `props` determinam como um componente se comporta quando recebe dados de fora, enquanto o `state` permite que ele responda a interações do usuário ou a eventos internos. É a combinação deles que faz a mágica acontecer. Pense em um formulário: os dados que você digita vão para o `state` do componente do formulário, e quando você envia, esse `state` pode ser passado como `props` para outro componente que vai processar a informação. A tela muda porque o `state` mudou.
Dica Prática: Sempre que você precisar que um dado seja alterado por um componente e essa mudança afete o que é exibido, use o `state`. Se a informação vem de fora e o componente só precisa exibi-la ou usá-la sem modificá-la, use `props`.

Diferença Fundamental: Mutabilidade e Fluxo de Dados
Pensa assim: `props` são as informações que um componente recebe de fora, como se fossem “argumentos” ou “propriedades” passadas pra ele. Elas vêm de um componente pai e não podem ser alteradas pelo componente que as recebe. É como dar uma instrução a alguém: a pessoa recebe a instrução e a executa, mas não muda a instrução em si.

Já o `state` é algo interno do componente. É a informação que o próprio componente gerencia e pode mudar com o tempo, seja por interação do usuário ou por alguma outra lógica. Quando o `state` muda, o React sabe que precisa redesenhar aquela parte da tela pra refletir a nova informação. É o estado atual de uma coisa, que pode evoluir.
O fluxo de dados em React geralmente é unidirecional: `props` descem do pai pro filho, e as mudanças no `state` de um componente podem, através de funções de callback passadas como `props`, notificar os componentes pais sobre as alterações. Isso mantém tudo organizado e previsível.
Dica Prática: Se você precisa passar dados de um componente pai para um filho e esse dado não deve ser modificado pelo filho, use `props`. Se o dado é gerenciado pelo próprio componente e pode mudar ao longo do tempo, use `state`.

Props Imutáveis, State Mutável: A Regra de Ouro
Vamos entender a diferença entre props e state no React de um jeito que gruda. Pensa assim: os props são como os ingredientes que você recebe na cozinha. Eles vêm de fora, de outro componente, e o seu componente atual não tem o poder de mudar esses ingredientes. Eles são fixos, imutáveis. Se você quer mudar algo que veio como prop, a mudança tem que acontecer em quem enviou o prop.

Agora, o state é o seu controle dentro da cozinha. É o que está acontecendo dentro do seu próprio componente. Você pode mexer no estado, mudar temperos, ajustar o fogo. O state é para as informações que o próprio componente gerencia e modifica ao longo do tempo. Por exemplo, se você tem um contador, o número atual é o state. Ele muda a cada clique. Os props são para comunicação de pai para filho, o state é para o controle interno do componente.
É fundamental ter essa clareza porque ela dita como seus componentes vão se comunicar e se comportar. Usar props para o que é externo e state para o que é interno evita uma bagunça de código. Seguindo essa regra, você garante que a informação flua de maneira previsível.
Dica Prática: Sempre que pensar em passar uma informação que precisa ser alterada pelo componente filho, reavalie. Se essa informação é realmente do filho, a melhor prática é criá-la como state dentro dele, em vez de tentar modificar um prop recebido.

Props Como Configuração, State Como Controle
No React, tanto props quanto state são formas de passar dados para os componentes. Pense nas props como uma configuração inicial que você passa de fora. Elas vêm de um componente pai e, uma vez definidas, o componente filho não pode alterá-las. É como receber uma instrução: “faça isso assim”. Elas são somente leitura, garantindo que o fluxo de dados seja previsível.

Já o state é para o controle interno do componente. É a informação que o próprio componente gerencia e pode modificar ao longo do tempo. Se o componente precisa “lembrar” de algo que pode mudar, como o valor de um campo de texto que o usuário está digitando, isso é state. É a autonomia do componente para gerenciar seu próprio estado. Quando o state muda, o componente se re-renderiza para mostrar a novidade.
Vamos combinar: props para o que vem de fora e não muda, state para o que o componente controla e pode alterar. Essa distinção é fundamental para criar interfaces dinâmicas e bem estruturadas. Saber quando usar um ou outro evita dores de cabeça.
Dica Prática: Se você precisa passar dados de um componente pai para um filho, use props. Se o dado precisa mudar dentro do próprio componente e afetar sua aparência ou comportamento, use state.

Componentes Filhos Recebendo Informação via Props
No React, a gente passa informação de um componente pai para um componente filho usando algo chamado `props`. Pensa nas `props` como um pacote que o pai manda pro filho. Esse pacote tem dados que o filho precisa para funcionar ou exibir algo. O filho recebe esse pacote e usa o que está dentro dele.

A grande sacada é que as `props` são imutáveis para o componente filho. Ou seja, o filho pode *ler* o que vem no pacote, mas ele não pode *alterar* o conteúdo do pacote original que veio do pai. Isso garante que a informação flua em uma direção, do pai para o filho, mantendo tudo organizado e previsível.
Agora, a diferença crucial: o `state`. Enquanto as `props` vêm de fora, o `state` é uma informação que pertence ao próprio componente. É como se fosse a “memória” interna do componente. Ele pode ler, modificar e gerenciar seu próprio `state`. Isso é essencial quando um componente precisa mudar algo ao longo do tempo, como um contador que aumenta ou um formulário que armazena o que o usuário digitou.
Dica Prática: Se a informação precisa vir de um componente pai, use `props`. Se a informação é interna e precisa mudar com o tempo dentro do próprio componente, use `state`.

Atualizando o Componente Pai com o State do Filho (via callbacks)
No React, a comunicação de pai para filho é direta: a gente usa as props. Mas e o contrário? Quando um componente filho precisa “falar” com o pai, a gente usa uma técnica chamada callback. Basicamente, o componente pai define uma função e passa essa função para o filho como uma prop. Aí, quando algo acontece no filho (tipo, o usuário digita algo em um input), ele chama essa função que recebeu do pai, enviando de volta a informação que o pai precisa.

Pensa assim: o componente pai está “ouvindo” o filho. A função que o pai passa é como um telefone. O filho pega esse telefone e liga de volta para o pai quando tem uma notícia. Essa notícia é o dado que o filho quer compartilhar. A diferença entre props e state no React é crucial aqui: props são para passar dados de cima para baixo, e state é para gerenciar dados internos do próprio componente. O callback permite que o filho atualize o state do pai, que geralmente é onde esses dados globais residem.
Essa comunicação é essencial para manter seu aplicativo sincronizado. Quando o filho modifica algo que afeta o estado geral, ele usa o callback para notificar o pai, que então atualiza seu próprio state, fazendo com que os componentes que dependem dessa informação sejam renderizados novamente. É um ciclo bem organizado.
Dica Prática: Quando for passar um callback, certifique-se de que ele está recebendo todos os dados necessários do filho para que o pai possa usá-los corretamente. Se você precisar passar um valor específico, use uma arrow function no onClick ou no onChange do filho, por exemplo: onClick={() => props.minhaCallback(valorDoFilho)}.
Opa, tudo tranquilo por aí? Vamos desmistificar essa parada de `props` e `state` no React, que eu sei que às vezes dá um nó na cabeça. Mas fica tranquilo, depois dessa, você vai sacar de primeira.
## Exemplos Práticos para Fixar o Conceito
Olha só, preparei uma tabelinha aqui para deixar tudo bem mastigado. É o tipo de coisa que você olha e já entende a lógica por trás.
| Conceito | Características | Dicas e Exemplos Práticos |
|---|---|---|
| Props: A Comunicação Clara entre Componentes | São dados que um componente pai “passa” para um componente filho. Pense neles como argumentos de uma função. | Se você tem um componente `Botao` e quer que ele mostre um texto específico, você passa esse texto via `props`: ` |
| State: A Memória Interna dos seus Componentes | É um conjunto de dados que um componente gerencia e que pode mudar ao longo do tempo. O componente “lembra” dessas informações. | Imagine um contador. O valor atual do contador é `state`. Quando você clica no botão para incrementar, você está mudando o `state`. O React atualiza a tela para mostrar o novo valor. |
| Como os Props São Passados: Via de Mão Única | Os dados fluem de cima para baixo, do pai para o filho. O filho recebe os `props` e não pode mudá-los diretamente. | É como dar um presente: você entrega, mas não espera que o presenteado vá lá e mude a embalagem original antes de receber. |
| Quando Usar Props: Informação Externa para o Componente | Use `props` quando a informação vier de fora do componente, definida por quem o está usando. | Precisa de um título para uma página? `props`. Precisa de um ID para buscar dados? `props`. Sempre que algo é “configurado” de fora. |
| Alterando o State: A Dinâmica Interna que Muda a Tela | O `state` é alterado usando uma função específica (como `setState` em classes ou o hook `useState` em funções). Isso faz o componente re-renderizar. | Quer que um checkbox fique marcado ou desmarcado? Isso é `state`. O estado interno de “selecionado” muda, e a tela reflete isso. |
| Diferença Fundamental: Mutabilidade e Fluxo de Dados | `Props` são imutáveis para o componente que as recebe; `state` é mutável e controlado pelo próprio componente. | Essa é a sacada principal. `Props` são para configurar, `state` é para gerenciar o comportamento interno que muda. |
| Props Imutáveis, State Mutável: A Regra de Ouro | Componentes filhos não devem (e nem podem facilmente) alterar os `props` que recebem. Já o `state` é feito para ser alterado. | Tentar mudar um `prop` é como tentar mudar uma lei: não é sua função e pode dar problema. Mudar o `state` é como decidir o que fazer na sua |
Confira este vídeo relacionado para mais detalhes:
Erros Comuns e Como Evitá-los
Pois é, a diferença entre props e state no React pode parecer um detalhe, mas entender isso evita muita dor de cabeça. Vamos direto ao ponto:
- Confundir o que muda com o que não muda: Se um dado muda de valor com o tempo, ele provavelmente é state. Se ele vem de um componente pai e não é alterado internamente, é props. Se você tenta modificar props, o React vai reclamar. Fica tranquilo, é a proteção dele.
- Alterar state diretamente: Nunca faça
this.state.algumDado = novoValor. Use semprethis.setState({ algumDado: novoValor }). Isso garante que o React saiba que algo mudou e precisa redesenhar a tela. - Passar state para baixo como props sem necessidade: Às vezes, a gente passa um state de um componente A para um componente C, passando pelo B, só pra ter acesso no C. Tente pensar se o B realmente precisa desse dado, ou se ele pode ser buscado de outra forma. Isso deixa o fluxo de dados mais limpo.
- Ignorar a atualização de state: Se você tem um formulário e não usa state para guardar o que o usuário digita, ele não vai funcionar como esperado. Cada caractere digitado precisa ser capturado e armazenado no state para que o componente reaja.
Vamos combinar: essas dicas práticas vão te ajudar a não cair em armadilhas comuns. Se você mantiver essa distinção clara na sua cabeça ao codar, o seu código React vai ficar muito mais robusto e fácil de dar manutenção.
Dúvidas das Leitoras
Posso modificar um prop diretamente?
Não, de jeito nenhum. Props são como informações que chegam de fora, e um componente não tem o poder de mudá-las. Pense nelas como regras que você recebe e não pode alterar.
Qual a diferença principal entre state e props em uma analogia simples?
Props são informações que um componente recebe de cima, como um presente que você ganha e não pode modificar. State é a informação que o próprio componente gerencia internamente, como o humor dele.
Quando devo usar state em vez de props?
Use state quando a informação precisa mudar com o tempo ou em resposta a ações do usuário dentro do próprio componente. Props são para dados que vêm de fora e não mudam.
Como um componente filho pode afetar o state de um componente pai?
O componente filho não afeta diretamente. O pai passa uma função para o filho, e quando o filho chama essa função, ele está, na verdade, pedindo ao pai para mudar o state dele.
É possível passar state de um componente pai para um filho sem que o filho possa alterá-lo?
Sim, claro! O pai simplesmente passa o state atual para o filho como uma prop. O filho recebe e usa essa informação, mas não pode modificá-la, exatamente como qualquer outra prop.
É isso, pessoal! Props são dados que chegam de fora, imutáveis. Já o state é o estado interno do seu componente, que muda. Entender essa diferença é crucial para qualquer projeto React. Se você curtiu, que tal explorar um pouco mais sobre componentes funcionais? Valeu!




