Object.assign()
เป็นคำตอบที่ง่าย แต่การใช้คำตอบสูงสุด (ปัจจุบัน) ของมัน - ในขณะที่ดีสำหรับการสร้างส่วนประกอบไร้สัญชาติจะทำให้เกิดปัญหาสำหรับวัตถุประสงค์ที่ต้องการของ OP ในการรวมสองstate
วัตถุ
ด้วยสองข้อโต้แย้งObject.assign()
จะกลายพันธุ์วัตถุแรกในสถานที่ที่มีผลต่อการสร้างอินสแตนซ์ในอนาคต
Ex:
พิจารณาการกำหนดค่าสไตล์ที่เป็นไปได้สองแบบสำหรับกล่อง:
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>
ความคิดของวัตถุที่กลายพันธุ์ในสถานที่นี้มีความสำคัญสำหรับการตอบสนองและการใช้งานที่เหมาะสมObject.assign()
จะมีประโยชน์มากสำหรับการใช้ห้องสมุดเช่น Redux