Object.assign()
这是一个简单的解决方案,但是(当前)最高答案的用法—尽管可以很好地制造无状态组件,但会给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之类的库。