C

Iniciando com React Hooks - useState

4 de fev. de 2021

Se você começou a mexer com React em 2019 é bem capaz de que você não conheça, ou conheça bem pouco, do mundo sem react hooks. Antes da versão 16.8 escrever componentes funcionais era algo bem raro, já que era impossível controlar estado ou dar qualquer "inteligência" para um componente que não fosse escrito com classe.

Era muito comum escrever componentes com estados utilizando classes e utilizar funções para componentes apenas de apresentação. Porém, o uso de classes apresentava alguns problemas que foram os principais motivadores para o surgimento dos hooks:

Afinal, o que é um hook?

Segundo a documentação do react, um hook é uma função especial que permite que os recursos do react sejam utilizados em um componente funcional. Um ótimo exemplo é o useState que permite adicionar estado em um componente de função.

Antes de prosseguir vou deixar um exemplo de componente com classe, pois é importante ter a noção de como as coisas eram antes.

class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
    this.increment = this.increment.bind(this);
    this.decrement = this.decrement.bind(this);
  }

  increment() {
    this.setState({ count: this.state.count + 1 });
  }

  decrement() {
    this.setState({ count: this.state.count - 1 });
  }

  render() {
    return (
      <div>
        <h1>Contador</h1>
        <h2>{this.state.count}</h2>
        <button onClick={this.increment}>+</button>
        <button onClick={this.decrement}>-</button>
      </div>
    );
  }
}

Agora vou mostrar o mesmo componente escrito utilizando hooks.

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

  function increment() {
    setCount(count + 1);
  }

  function decrement() {
    setCount(count - 1);
  }

  return (
    <div>
      <h1>Contador</h1>
      <h2>{count}</h2>
      <button onClick={increment}>+</button>
      <button onClick={decrement}>-</button>
    </div>
  );
}

useState

O useState é um hook que permite o uso de estado em um componente funcional e simplifica bastante o gerenciamento de um estado se comparado ao gerenciamento em um componente de classe.

Entenda o funcionamento do useState:

A imagem abaixo indica cada parte do hook useState:

 Detalhamento o useState

Atualizando state

No nosso exemplo utilizamos o seguinte trecho de código para atualizar nosso estado: setCount(count + 1)

Porém, tem um grande problema em utilizar dessa forma, pois, pode acontecer algum efeito colateral que deixe o nosso estado(count) desatualizado. Para resolver esse problema a função que atualiza o estado pode aceitar um valor de qualquer tipo, incluindo uma função. Como assim uma função? Vou mostrar um exemplo e explicar que tudo vai fazer sentido.

setCount((old) => old + 1)

Nosso setCount, que poderia ter qualquer nome, recebe uma função que recebe um argumento que representado o nosso estado atual, aqui temos a garantia total de que o estado está correto. Essa mesma função precisa retornar um valor que será reatribuído ao nosso estado.

Dessa forma nossa reatribuição fica mais segura.

Ficou confuso? A imagem a seguir deixa mais claro.

Atualizando state

Antes de sair utilizando um hook é importante você ficar atento a algumas regras importantes.

Regras importantes ao usar um hook

Isso é tudo pessoal!

Isso é tudo pessoal

Obrigado por chegar até aqui!! Espero que tenha conseguido te ajudar de alguma forma. 😊

Esse foi o início de uma série que irei fazer abordando os hooks disponíveis no react. Fique atento aqui no blog e no meu twitter que em breve irei postar mais artigos sobre hooks.

Links importantes