2016-07-27 70 views
8

Giả sử có một đối tượng:Immutable.js Đẩy vào mảng trong đối tượng lồng nhau

const object = { 
    'foo': { 
    'bar': [1, 2, 3] 
    } 
} 

tôi cần phải đẩy 4-object.foo.bar mảng.

Ngay bây giờ tôi đang làm nó như thế này:

const initialState = Immutable.fromJS(object) 
const newState = initialState.setIn(
    ['foo', 'bar', object.foo.bar.length], 
    4 
) 
console.log(newState.toJS()) 

Nhưng tôi không thực sự thích nó, vì tôi cần phải sử dụng object.foo.bar.length trong đường dẫn. Trong đối tượng ví dụ thực của tôi được lồng sâu hơn nhiều, và chiều dài của mảng trông rất xấu xí. Có cách nào khác, thuận tiện hơn không?

Trả lời

2

Tôi đang sử dụng seamless-immutable, khi tôi thêm một mục mới vào mảng các đối tượng lồng nhau, tôi gặp lỗi này:

The push method cannot be invoked on an Immutable data structure.

Mảng của tôi vẫn có phương pháp push, nhưng nó không hoạt động. Giải pháp thay thế là sử dụng concat, để biết thêm chi tiết về #43:

initialState.updateIn(['foo', 'bar'], arr => arr.concat([4])); 

Hy vọng trợ giúp này!

+0

Cùng một vấn đề ở đây, có ý nghĩa kể từ khi đẩy sửa đổi mà không thể với cấu trúc dữ liệu bất biến. – Lucas

Các vấn đề liên quan