Olá, Abner! Tudo bem?
Quando passamos um objeto, ou uma array, para uma variável ou uma constante, o valor que é guardado é um endereço de memória em que está salvo o objeto (ou a primeira posição da array).
Isso acontece porque objetos e arrays não podem ser salvos em apenas uma unidade de memória, pois possuem valores diferentes (no caso de objetos, várias propriedades, e no caso de arrays, várias posições).
Apesar disso, o JavaScript faz o tratamento para que nós não precisemos nos preocupar com isso, então trabalhamos, na maioria das vezes, sem essa noção.
Certo, agora vamos olhar melhor o trecho de código que você forneceu:
const novoEstado = {...erros};
Acima, estamos atribuindo um novo objeto à variável novoEstado
, e como eu disse, essa variável irá guardar um valor diferente do objeto com o qual trabalhamos, esse valor é uma referência ao objeto, uma instrução para seu computador saber onde encontrá-lo.
Quando alteramos o valor de novoEstado[name]
, o valor de novoEstado
não muda. Uma das suas propriedades tem seu valor alterado, sim, mas o endereço de memória que serve de referência ao objeto ainda é o mesmo, e por isso, é constante.
De toda forma, o código funcionaria normalmente se novoEstado
fosse declarado usando let
, por exemplo. Mas a escolha foi usar const
. O motivo é a boa prática, que ajuda muito a manter o desenvolvimento de uma aplicacação sobre controle, principalmente quando os valores são usados em vários momentos.
Usar const
é boa prática pois nos ajuda a "rastrear" mudanças, e incentiva a imutabilidade (um conceito muito importante do React). Por isso, sempre é dada preferência à const
, mesmo que não vá fazer muita diferença. Apenas usa-se let
quando realmente for necessário, pois é preciso fazer uma alteração de forma que const
tornaria impossível.
Beleza?
Qualquer coisa, estamos aqui no fórum! Bons estudos!