Object.assign()
là một giải pháp dễ dàng, nhưng cách sử dụng câu trả lời hàng đầu (hiện tại) của nó - trong khi chỉ tốt khi tạo các thành phần không trạng thái, sẽ gây ra vấn đề cho mục tiêu mong muốn của OP là hợp nhất hai state
đối tượng.
Với hai đối số, Object.assign()
sẽ thực sự làm thay đổi đối tượng đầu tiên tại chỗ, ảnh hưởng đến việc khởi tạo trong tương lai.
Ví dụ:
Xem xét hai cấu hình kiểu có thể cho một hộp:
var styles = {
box: {backgroundColor: 'yellow', height: '100px', width: '200px'},
boxA: {backgroundColor: 'blue'},
};
Vì vậy, chúng tôi muốn tất cả các hộp của mình có kiểu 'hộp' mặc định, nhưng muốn ghi đè lên một số bằng một màu khác:
// 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>
Khi Object.assign()
thực thi, đối tượng 'Styles.box' được thay đổi cho tốt.
Giải pháp là truyền một đối tượng trống vào Object.assign()
. Khi làm như vậy, bạn đang nói phương thức tạo ra một đối tượng MỚI với các đối tượng bạn vượt qua nó. Thích như vậy:
// 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>
Khái niệm về các đối tượng đột biến tại chỗ rất quan trọng đối với React và việc sử dụng đúng cách Object.assign()
thực sự hữu ích cho việc sử dụng các thư viện như Redux.