Object.assign()
は簡単な解決策ですが、(現在の)トップアンサーの使用法—ステートレスコンポーネントを作成するのは問題ありませんが、2つのstate
オブジェクトをマージするというOPの望ましい目的に対して問題が発生します。
2つの引数を指定Object.assign()
すると、最初のオブジェクトが実際に変更され、将来のインスタンス化に影響します。
例:
ボックスの2つの可能なスタイル構成を検討してください。
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のようなライブラリーを使用するのに非常に役立ちます。