Object.assign() 是一个简单的解决方案,但是(当前)top answer 的使用——虽然对于制作无状态组件来说很好,但会导致 OP 合并两个 state 对象的预期目标出现问题。
使用两个参数,Object.assign() 实际上会就地改变第一个对象,影响未来的实例化。
例如:
考虑一个盒子的两种可能的样式配置:
var styles = {
box: {backgroundColor: 'yellow', height: '100px', width: '200px'},
boxA: {backgroundColor: 'blue'},
};
所以我们希望我们所有的盒子都具有默认的“盒子”样式,但想用不同的颜色覆盖一些:
// this will be yellow
<div style={styles.box}></div>
// this will be blue
<div style={Object.assign(styles.box, styles.boxA)}></div>
// this SHOULD be yellow, but it's blue.
<div style={styles.box}></div>
一旦Object.assign() 执行,'styles.box' 对象就会永久更改。
解决方案是将一个空对象传递给Object.assign()。这样做,您告诉该方法使用您传递的对象生成一个 NEW 对象。像这样:
// this will be yellow
<div style={styles.box}></div>
// this will be blue
<div style={Object.assign({}, styles.box, styles.boxA)}></div>
// a beautiful yellow
<div style={styles.box}></div>
这种对象就地变异的概念对于 React 至关重要,正确使用 Object.assign() 对于使用像 Redux 这样的库非常有帮助。