Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

função EscutadorSubmit

estou ultilizando os hooks no curso, porem estou com duvida para unir os autores antigos com o novo autor, na função escutadorSubmit do app.js já está chegando os dados do novo autor, porem queria saber como pegar os dados antigos e juntar com os novos sem apagar todo o estado, minha função está assim:

  function escutadorSubmit(autor){
    console.log("novoAutor:", autor);
    console.log(autores, autor);
    setAutores(autor)
  }
5 respostas

Fala ai Renato, tudo bem? Assim como no this.setState a gente podia passar uma função que recebia o estado anterior, com hooks isso também é possível, exemplo:

setAutores(estadoAnterior => ({ ...estadoAnterior, autor }))

Repare que a função recebe o estado anterior como primeiro parâmetro.

Espero ter ajudado.

Fiz o código como você informou, porem tive esse resultado:

0: {nome: "Paulo", livro: "React", preco: "1000"}
1: {nome: "Daniel", livro: "Java", preco: "99"}
2: {nome: "Renato", livro: "Design", preco: "150"}
3: {nome: "Bruno", livro: "DevOps", preco: "100"}
autor: {nome: "ded", livro: "de", preco: "de"}

Ele não adicionou dentro do estado, e sim criou um novo.

O objeto autor esta chegando assim:

novoAutor: {nome: "ded", livro: "de", preco: "de"}

e fiz a implementação assim:

const  [autores, setAutores] = useState([
    {
      nome: 'Paulo',
      livro: 'React',
      preco: '1000'
    },
    {
      nome: 'Daniel',
      livro: 'Java',
      preco: '99'
    },
    {
      nome: 'Renato',
      livro: 'Design',
      preco: '150'
    },
    {
      nome: 'Bruno',
      livro: 'DevOps',
      preco: '100'
    },
  ]);

function escutadorSubmit(autor){
    console.log("novoAutor:", autor);
    // console.log(autores, autor);
    setAutores(autores => ({...autores,autor}))
  }
solução!

Fala Renato, nesse caso é um array de autores e você quer adicionar mais um, pensei que era para alterar um objeto autor.

Tenta assim:

setAutores(autoresAnterior => [...autoresAnterior, autor])

Você cria um novo array, pega todos os valores atuais no vindo no autoresAnterior e adiciona o autor novo.

Cuidado com os nomes de variaveis e parâmetros, você tinha definido o mesmo novo do seu estado, no caso: autores.

Espero ter ajudado.

Deu certo, obrigado!

Magina Renato, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.