Neste artigo você aprenderá a como alterar corretamente o estado com useState, um hook muito importante do React JS!

alterar corretamente o estado com useState capa

Fala programador(a), beleza? Bora aprender mais sobre programação e React!

O React é uma biblioteca de JavaScript para criar interfaces de usuário, amplamente utilizado por sua simplicidade e flexibilidade.

Um dos principais conceitos em React é o estado, que permite que componentes mantenham e manipulem dados.

O Hook useState é uma das maneiras mais comuns de gerenciar o estado no React.

Entendendo o useState

No React, o estado é uma instância de dados que pode ser manipulada e renderizada no componente.

O Hook useState é uma função que permite que você adicione o estado ao componente funcional do React.

import React, { useState } from 'react';

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

  return (
    <div>
      <p>Você clicou {count} vezes</p>
      <button onClick={() => setCount(count + 1)}>
        Clique aqui
      </button>
    </div>
  );
}

Neste exemplo, useState(0) é uma função que aceita o estado inicial como argumento (neste caso, 0) e retorna uma matriz com dois elementos: a primeira é a variável de estado atual (count) e a segunda é a função para atualizar o estado (setCount).

Atualizando o Estado Corretamente

Uma das coisas mais importantes a lembrar ao usar useState é nunca atualizar o estado diretamente.

Sempre use a função de atualização de estado (setCount no exemplo acima) fornecida por useState.

Isso ocorre porque o React depende do antigo estado para calcular o novo estado e renderizar a UI de acordo.

Estado Anterior

Em algumas situações, precisamos acessar o estado anterior para calcular o novo estado.

Nesse caso, podemos passar uma função para a função de atualização de estado.

Esta função recebe o estado anterior como argumento e retorna o novo estado.

import React, { useState } from 'react';

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

  return (
    <div>
      <p>Você clicou {count} vezes</p>
      <button onClick={() => setCount(prevCount => prevCount + 1)}>
        Clique aqui
      </button>
    </div>
  );
}

Aqui, setCount recebe uma função que usa prevCount (o estado anterior de count) para calcular o novo estado.

useState com Objetos e Arrays

Também podemos usar useState com objetos e arrays. No entanto, é importante lembrar que useState não faz a fusão de objetos ou arrays como this.setState faz em componentes de classe.

Em vez disso, ele substitui o estado anterior pelo novo estado.

import React, { useState } from 'react';

function Form() {
  const [form, setForm] = useState({ name: '', email: '' });

  const handleChange = e => {
    setForm(prevForm => ({
      ...prevForm,
      [e.target.name]: e.target.value,
    }));
  };

  return (
    <div>
      <input name="name" value={form.name} onChange={handleChange} />
      <input name="email" value={form.email} onChange={handleChange} />
    </div>
  );
}

Neste exemplo, estamos usando a função handleChange para atualizar o estado do formulário. Estamos usando o operador de propagação (...) para copiar todo o estado anterior e, em seguida, atualizamos apenas a propriedade que queremos.

O useState é Assíncrono

Uma coisa crucial para entender sobre o useState é que a atualização do estado é assíncrona. Isto significa que as chamadas setState são enfileiradas e executadas após a renderização do componente ter sido concluída.

import React, { useState } from 'react';

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

  const handleClick = () => {
    setCount(count + 1);
    console.log(count); // Isto irá logar o estado anterior, não o novo estado
  };

  return (
    <div>
      <p>Você clicou {count} vezes</p>
      <button onClick={handleClick}>
        Clique aqui
      </button>
    </div>
  );
}

Neste exemplo, você pode esperar que o console.log registre o novo estado após o setCount, mas ele ainda irá registrar o estado anterior.

Isso ocorre porque a atualização do estado não ocorre imediatamente, mas é agendada para acontecer depois que a renderização atual é concluída.

Usando Múltiplos Estados

Uma das vantagens do Hook useState é que você pode usá-lo várias vezes em um único componente. Isso permite que você separe diferentes valores de estado em diferentes variáveis de estado, em vez de ter um único objeto de estado grande.

import React, { useState } from 'react';

function Form() {
  const [name, setName] = useState('');
  const [email, setEmail] = useState('');

  // ...

  return (
    <div>
      <input value={name} onChange={e => setName(e.target.value)} />
      <input value={email} onChange={e => setEmail(e.target.value)} />
    </div>
  );
}

Separar o estado desta maneira pode tornar seu código mais limpo e mais fácil de gerenciar, especialmente à medida que seu componente cresce e se torna mais complexo.

Estado Derivado

Em alguns casos, você pode querer derivar o estado de outra propriedade ou variável. Isso é chamado de estado derivado.

No entanto, tenha cuidado ao fazer isso, pois pode levar a bugs se não for gerenciado corretamente.

import React, { useState, useEffect } from 'react';

function UserName({ id }) {
  const [user, setUser] = useState(null);

  useEffect(() => {
    fetchUser(id).then(userData => setUser(userData));
  }, [id]);

  // ...

  return <div>{user ? user.name : 'Carregando...'}</div>;
}

Neste exemplo, o estado user é derivado do prop id. Sempre que id muda, a função fetchUser é chamada para atualizar o estado user.

Isso é feito usando o Hook useEffect, que permite executar efeitos colaterais (como buscar dados) em componentes funcionais.

Quer aprender mais sobre programação? Conheça nosso canal no YouTube:

Conclusão

E chegamos ao fim do artigo sobre como alterar corretamente o estado com useState!

O Hook useState é uma ferramenta poderosa para gerenciar o estado em componentes funcionais do React.

Ele oferece flexibilidade para trabalhar com vários tipos de dados e fornece um método fácil de manipular e renderizar dados de estado em sua aplicação.

Lembre-se sempre de não alterar o estado diretamente e usar a função de atualização de estado para garantir que o React possa acompanhar as mudanças e renderizar a interface do usuário de acordo.

Está buscando em evoluir como Programador? Confira o nossos cursos de programação.

Subscribe
Notify of
guest

0 Comentários
Inline Feedbacks
View all comments