Props e Estado
Como aprendemos no capítulo anterior, as props
são as “características” de um componente. Vamos aprofundar mais nesse conceito.
Props
No React, todos os componentes podem receber props
como argumentos. Essas props
são passadas para o componente como atributos HTML.
Imutabilidade
Existem algumas regras quando utilizamos props e a principal delas é que props são imutáveis.
Você não pode fazer o seguinte:
As props podem ser qualquer valor JavaScript
Props podem ser de qualquer tipo de valor JavaScript, como números, strings, booleanos, arrays, objetos, funções, etc.
Por exemplo:
As props são passadas de “pai” para “filho”
As props “navegam” de cima para baixo, ou seja, de um componente pai para um componente filho. Não é possível passar props de um componente filho para um componente pai.
Se precisarmos que o componente filho “converse” com o componente pai, precisaríamos utilizar estratégias diferentes, como passar uma função que altera o estado do componente pai ou então utilizar o Context API ou alguma lib como o Redux.
Por falar em estado, vamos entender um pouco mais sobre ele.
Estado
Enquanto as props definem as características de um componente, o estado define o “momento” em que o componente está.
Como falamos antes, as props não podem ser alteradas, mas o estado pode. Então o estado é a forma correta de armazenar dados que podem mudar durante a execução do componente.
Voltando ao exemplo do corpo humano, é como se as props
fossem o DNA e o estado fosse como a pessoa está no momento. Por exemplo, a pessoa pode ter olhos castanhos, mas pode colocar uma lente e ficar com olhos azuis.
Seria algo como:
Para lidar com o estado, utilizamos o hook useState
. Esse hook retorna um array com dois valores: o primeiro é o estado atual e o segundo é uma função para atualizar o estado. Além disso, o estado inicial é passado como argumento para o hook.
O algoritmo do React
Conforme falamos um pouco no início do workshop, o React possui um algoritmo que determina quando os componentes serão renderizados. Por padrão, a cada vez que o estado dentro de um componente é alterado, esse componente é re-renderizado.
Quando um componente é renderizado, todos os seus filhos também são renderizados.
Incluindo estado na nossa aplicação
Na nossa aplicação, estávamos pegando os dados de imóveis de forma estática, direto no arquivo. Mas em uma aplicação real, esses dados geralmente são buscados de uma API. Vamos implementar uma simulação de API em breve, mas primeiro vamos salvar os dados em um estado.