Object.assign () modifica seus parâmetros? [duplicado]
Não sei por que o valor de 'dados' está sendo modificado no test.jsarquivo.
// data.js export default { a: 1, b: 2, c: 3, };
// test.js
import data from "./data"; console.log({ data }); // {a:1,b:2,c:4} const modif1 = Object.assign(data, { c: 4 }); console.log({ modif1 }); // {a:1,b:2,c:4}
Não consegui reproduzi-lo no codepen, mas aqui está um repo: https://github.com/bmichalowski/shards caminho para o arquivo: ./src/stories/PropsBug
Eu não acho que uma reação ou livro de histórias tenha algo a ver com isso, então eu não o etiquetei.
Editar:
Neste jsfiddle, o comportamento é o esperado. https://jsfiddle.net/83xsdomb/No entanto, meu código tem uma ordem diferente. Por que o dateexibido é modificado quando é teoricamente modificado depois de ser exibido?
Respostas
De acordo com os documentos :
O método Object.assign () copia todas as propriedades próprias enumeráveis de um ou mais objetos de origem para um objeto de destino. Ele retorna o objeto de destino.
As propriedades no objeto de destino são substituídas por propriedades nas origens se elas tiverem a mesma chave. As propriedades das fontes posteriores sobrescrevem as anteriores.
Basicamente, ele modifica o primeiro objeto passado a ele e retorna o mesmo objeto.
Você pode evitar isso passando {}como o primeiro parâmetro.
const data = { a: 1, b: 2, c: 3}
const modif1 = Object.assign({}, data, { c: 4 });
console.log(data);
console.log(modif1);