Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Passando objeto dentro do hook

Olá, bom eu dei uma pesquisada no hook do useState para vê se tinha outras maneiras de criar um estado, e eu achei uma maneira um pouco diferente do que foi passado na aula, a maneira era passando um objeto dentro do hook, exemplo:

Como eu fiz do jeito que pesquisei:

const [state, setState] = useState({
      name: '',
      sobrenome: '',
      cpf: '',
   })

como foi mostrado na aula:

const [nome,  setNome] =  useState('')
const [sobrenome,  setSobrenome] =  useState('')
const [cpf,  setCpf] =  useState('')

Minha duvida é, fazendo desta maneira de como eu fiz pesquisando, muda como o hook vai funcionar? ou vai funcionar da mesma maneira de como foi mostrado na aula?

Agradeço a resposta.

1 resposta
solução!

Sim! muda completamente a maneira como funciona.

Quando utilizamos um useState para cada campo, fica mais fácil de atualizar campos sozinhos. Por exemplo, digamos que o usuário esta digitando o nome. No caso do nome ter um estado somente para ele, temos apenas que nos preocupar com o nome, mas se estivermos usando um único estado para vários campos, teremos que cuidar para não modificar os outros estados.

Exemplo

const  [state, setState] = useState({
    nome: '',
    sobrenome: '',
    cpf: '',
})

Para o caso apresentado acima, se quisermos modificar o nome, termos que sempre salvar o estado atual completo em uma variavel, atualizar o nome e setar o estado completo:

// criar uma copia do estado atual completo
const  estadoAtual = state; 

// modificar o campo nome, na copia
estadoAtual.nome = 'Marcelo';

// re-escrever o estado completo pelo novo estado atualizado
setState(estadoAtual);

Portanto para modificar apenas o nome estaríamos tendo que copiar o estado completo, depois modifica-lo e por fim re-escrever ele completamente, mesmo que so desejamos alterar o nome. Esta prática acaba se tornando ineficiente, eu recomendaria fortemente em utilizar um estado para cada campo.

Por exemplo com um estado para cada campo, se precisarmos alterar o nome, podemos simplesmente utilizar o setNome:

const [nome,  setNome] =  useState('');
const [sobrenome,  setSobrenome] =  useState('');
const [cpf,  setCpf] =  useState('');

setNome('Marcelo');

Desta maneira não modificamos nem sequer tocamos em outro estado a não ser o próprio nome. Diminuindo a chance de erros e bugs, e aumentando a eficiência do nosso código.

Espero ter ajudado Renan, todos estamos juntos pelo aprendizado!!!