2016-04-07 19 views
1

state nesnesinde herhangi bir mutasyondan kaçınmak zorundasınız. Immutable.Map()'u kullanarak rowId tarafından satır metnini nasıl değiştirebilirim?ImmutableJS Map kullanarak iç içe dizi içindeki bir öğenin özelliği nasıl ayarlanır?

setIn işlev, bu durumda Map ile çalışmıyor gibi görünüyor mu?

var state = { 
    pages: [ 
     { 
      tiles: [ 
       { 
        rows: [ 
         {rowId: 'row1', text: 'text1'}, 
         {rowId: 'row2', text: 'text2'}, 
         {rowId: 'row3', text: 'text3'} 
         //... 
        ] 
       }, 
       { 
        //... 
       } 
       //... 
      ] 
     } 
     //... 
    ] 
}; 

function onRowUpdateAction(state, rowId, rowText) { 
     var map = Immutable.Map(state); 
     //TODO: Update row text by row id ? 

     return map.toObject(); 
} 
var newState = onRowUpdateAction(state, 'row2', 'updatedText'); 

Şimdiden teşekkürler! Hem Haritalar hem de Listeler ile birlikte güzel bir şekilde

cevap

0

setIn. Sorunu yazdığınızdan, gerçekten değişmez bir yapıyla uğraştığınız görülüyor. oluştururken immutable.Map böyle

immutable.Map({a: {b: 'c'}}) 

olarak (düz JS nesnesi olarak) tuşuna 'a' ve değer {b: 'c'} ile değişmez Harita oluşturur, unutmayın! Hiç şaşılacak şey, bu immutable'ın getIn onunla çalışmaz.

Yapısını çok fazla değişmez yapmak için, immutable.fromJS kullanın (bu muhtemelen kullanmak istediğiniz şeydir).

İlgili konular