我不确定test.js
文件中修改"data"值的原因。
// 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}
我无法在codepen中复制它,但这里有一个repo:https://github.com/bmichalowski/shards文件路径:./src/stories/PropsBug
我不认为反应或故事书与它有任何关系,所以我不标记它。
编辑:
在这个jsfiddle中,行为正如预期的那样。https://jsfiddle.net/83xsdomb/但是,我的代码有不同的顺序。为什么date
在显示后进行理论上的修改时会被修改?
根据文档:
Object.assign((方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象。它返回目标对象。
如果目标对象中的属性具有相同的键,则它们将被源中的属性覆盖。以后的源的属性将覆盖以前的源。
本质上,它修改传递给它的第一个对象,并返回相同的对象。
可以通过将{}
作为第一个参数来避免这种情况。
const data = { a: 1, b: 2, c: 3}
const modif1 = Object.assign({}, data, { c: 4 });
console.log(data);
console.log(modif1);