Tôi đang cố gắng tạo một phương pháp bản đồ sao chép sâu cho dự án Redux của mình sẽ hoạt động với các đối tượng thay vì mảng. Tôi đọc rằng trong Redux mỗi trạng thái không nên thay đổi bất kỳ điều gì trong các trạng thái trước đó.
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
output[key] = callback.call(this, {...object[key]});
return output;
}, {});
}
Nó hoạt động:
return mapCopy(state, e => {
if (e.id === action.id) {
e.title = 'new item';
}
return e;
})
Tuy nhiên, nó không sao chép sâu các mục bên trong nên tôi cần phải chỉnh nó thành:
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
let newObject = {...object[key]};
newObject.style = {...newObject.style};
newObject.data = {...newObject.data};
output[key] = callback.call(this, newObject);
return output;
}, {});
}
Điều này kém thanh lịch hơn vì nó yêu cầu biết đối tượng nào được chuyển qua. Có cách nào trong ES6 để sử dụng cú pháp lây lan để sao chép sâu một đối tượng không?
combineReducers
để kết hợp hai (hoặc nhiều) với nhau. Nếu bạn sử dụng các kỹ thuật redux thành ngữ, vấn đề nhân bản sâu đối tượng của bạn sẽ biến mất.