Object.assign()
es una solución fácil, pero el uso (actualmente) de la respuesta principal de la misma, aunque es ideal para hacer componentes sin estado, causará problemas para el objetivo deseado del OP de fusionar dos state
objetos.
Con dos argumentos, en Object.assign()
realidad mutará el primer objeto en el lugar, afectando futuras instancias.
Ex:
Considere dos posibles configuraciones de estilo para un cuadro:
var styles = {
box: {backgroundColor: 'yellow', height: '100px', width: '200px'},
boxA: {backgroundColor: 'blue'},
};
Por lo tanto, queremos que todas nuestras cajas tengan estilos de 'caja' predeterminados, pero queremos sobrescribir algunas con un color diferente:
// 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>
Una vez que se Object.assign()
ejecuta, el objeto 'styles.box' cambia para siempre.
La solución es pasar un objeto vacío a Object.assign()
. Al hacerlo, le está diciendo al método que produzca un NUEVO objeto con los objetos que le pasa. Al igual que:
// 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>
Esta noción de objetos que mutan en el lugar es crítica para React, y el uso adecuado de esto Object.assign()
es realmente útil para usar bibliotecas como Redux.