Object.assign()
é uma solução fácil, mas o uso (atualmente) da principal resposta - embora seja bom para criar componentes sem estado, causará problemas para o objetivo desejado do OP de mesclar dois state
objetos.
Com dois argumentos, Object.assign()
na verdade, o primeiro objeto será modificado, afetando instanciações futuras.
Ex:
Considere duas configurações de estilo possíveis para uma caixa:
var styles = {
box: {backgroundColor: 'yellow', height: '100px', width: '200px'},
boxA: {backgroundColor: 'blue'},
};
Portanto, queremos que todas as nossas caixas tenham estilos padrão de 'caixa', mas queremos substituir alguns com uma cor 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>
Uma vez Object.assign()
executado, o objeto 'styles.box' é alterado para sempre.
A solução é passar um objeto vazio para Object.assign()
. Ao fazer isso, você está dizendo ao método para produzir um novo objeto com os objetos que você o transmite. Igual a:
// 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>
Essa noção de objetos com mutação no local é crítica para o React, e o uso adequado de Object.assign()
é realmente útil para o uso de bibliotecas como o Redux.