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()
. При этом вы говорите методу для создания нового объекта с объектами, которые вы передаете ему. Вот так:
// 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.