Object.assign()
це просте рішення, але використання (на даний момент) основної відповіді на це - хоч і чудово для створення компонентів без громадянства, спричинить проблеми для бажаної мети ОП - об'єднання двох state
об'єктів.
За допомогою двох аргументів Object.assign()
фактично буде вимкнено перший об'єкт на місці, впливаючи на майбутні моменти.
Наприклад:
Розглянемо два можливих конфігурації стилю для поля:
var styles = {
box: {backgroundColor: 'yellow', height: '100px', width: '200px'},
boxA: {backgroundColor: 'blue'},
};
Отже, ми хочемо, щоб усі наші поля мали стилі "box" за замовчуванням, але ми хочемо перезаписати деякі з іншого кольору:
// 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()
. Роблячи це, ви говорите про спосіб створення НОВОГО об'єкта з об'єктами, які ви передаєте йому. Так:
// 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.