useState - State em um Functional Component do React

useState - State em um Functional Component do React

Entenda de uma forma simples como funciona e como utilizar

Obs: Esse conteúdo faz parte da Plataforma Front Academy.
Assista também nosso vídeo sobre esse assunto no YouTube

​O ​useState​ é um React Hook que nos permite usar states em um Functional Component, adicionando comportamentos e interações dinâmicas a uma página.

O que é um Hook?

Um Hook é uma função especial que te permite utilizar recursos do React. Por exemplo, useState é um Hook que te permite adicionar o state do React a um componente de função. - Documentação Oficial do React

Em geral, os Hooks começam com a palavra "use"​. Sempre que você ver essa palavra no início do nome de uma função, é muito provável que esteja vendo um Hook. Alguns exemplos são:

  • useState;

  • useEffect;

  • useReducer;

  • useContext;

  • e muitos outros.

​​Sintaxe do useState

const [liked, setLiked] = useState(false) // o valor de liked inicialmente é false

O ​useState​, ao ser executado, recebe um valor inicial e retorna um array com dois valores.

Podemos então pegar esses dois valores utilizando um ​destructuring assignment - entenda melhor essa sintaxe nesse outro artigo do blog​.

O primeiro valor é a variável do nosso state com o valor inicial que passamos ao useState - no exemplo acima é false - enquanto o segundo é uma função que tem como papel alterar o valor da primeira. Parece confuso? Vamos enteder com calma.

O valor inicial pode ser omitido, nesse caso, o valor inicial do state será undefined.

const [liked, setLiked] = useState() // aqui, "liked" será inicializado com um valor undefined

É importante que o valor inicial represente aquilo que realmente desejamos para aquele state, mesmo que a princípio um valor ​undefined​ possa fazer sentido. Ou seja, se queremos que um state tenha uma ​string, devemos iniciá-lo com uma string vazia; se queremos um array, com um array vazio; e assim sucessivamente.

Veja a comparação abaixo:

// sem valores iniciais bem definidos, o tipo de dado que iremos salvar em cada state fica "implícito"// o que não é bom, mesmo que o código funcione com um valor inicial undefined
​​const [liked, setLiked] = useState()
​const [nome, setName] = useState()
​const [count, setCount] = useState()
​const [lista, setLista] = useState()
​const [pessoa, setPessoa] = useState()
​
​// com valores iniciais bem definidos, só de ler o código já sabemos qual// o tipo de dado que cada state possuiconst [liked, setLiked] = useState(false) // liked é do tipo booleanconst [name, setName] = useState('') // name é do tipo stringconst [count, setCount] = useState(0) // count é do tipo numberconst [list, setList] = useState([]) // list é do tipo arrayconst [pessoa, setPessoa] = useState({}) // pessoa é do tipo object

No segundo exemplo, definimos de forma explícita o valor inicial de cada state, o que, além de evitar bugs, torna a leitura do código muito mais clara, já que vemos de forma explícita qual o tipo de dado dos states.

Lembre-se, em programação, explícito é melhor do que implícito.

Observe também que utilizamos vários states. Em um mesmo componente podemos utilizar quantos ​useState​​ quisermos ou forem necessários.

​​Utilizando e alterando o valor de um state

Após definir um state, podemos utilizá-lo dentro da nossa estrutura de HTML, sendo que, ao alterar seu valor utilizando o setState (o segundo valor que pegamos do useState), o React atualizará a página automaticamente.

Analisemos o seguinte exemplo:

function Counter() {
​  const [count, setCount] = useState(0)

  return (
    <div>
      <button onClick={() => setCount(count + 1)}>
        O count é: {count}
      </button>
    </div>
  )
}
  • Criamos um componente chamado ​Counter​, que retorna um HTML simples, com apenas uma ​​div​ e um ​button​;

  • Criamos um state chamando a função ​useState(0)​ e passando um valor inicial ​0​;

  • Definimos o texto do elemento ​button​ como sendo "O count é: {count}", que será exibido inicialmente como: "O count é: 0";

  • Colocamos uma ação de ​onClick​ nesse botão, que irá executar uma função anônima, que por sua vez chamará ​setCount(count + 1)​, que irá alterar o valor da variável ​count​, somando mais um em seu valor atual;

  • Sempre que o valor da variável ​count​ é alterado, o React reage​ a essa alteração e atualiza a exibição da página automaticamente.

​​Conclusão

​Os states no React são uma ferramenta muito poderosa, que adicionam comportamentos e interações dinâmicas a uma página. Entender seu funcionamento é meio caminho andado para entender o React, por isso, tenha certeza de estudar com calma esse conceito.