2015-09-02 7 views
36

bir derin iç içe nesne özelliğini değiştirmek kolaydır nesneleriImmutable.js'de derin bir iç içe geçmiş değeri nasıl ayarlayabilirim? Ben yeni insanlar itiraz var önce her tesisin ataları geçmek zorunda Fakat Immutable ile</p> <pre><code>people.Thomas.nickname = "Mr. T"; </code></pre> <p>: Düz JavaScript ile çalışırken

var thomas = peopleImmutable.get("Thomas"); 
var newThomas = thomas.set("nickname", "Mr .T"); 
peopleImmutable = peopleImmutable.set("Thomas", newThomas); 

Bunu yazmanın daha zarif bir yolu var mı?

peopleImmutable = peopleImmutable.setIn("Thomas.nickname".split("."), "Mr. T"); 

cevap

54

Immutable içinde Maps

kolay derin değerlerini ayarlamak için kılan bir setIn method var? Örneğin: peopleImmutable = peopleImmutable.setIn (["Thomas", hasNickName], toggleBooleanHere);
+0

nasıl SETIN kullanarak bir boolean geçiş olacaktır: diziyi oluşturmak için split kullanarak,

peopleImmutable = peopleImmutable.setIn(["Thomas", "nickname"], "Mr. T"); 

Veya: –

+0

@zero_cool: Sanırım insanlarmümkün = peopleImmutable.setIn (["Thomas", "hasNickName"],! PeopleImmutable.getIn (["Thomas", "hasNickName"])); (test edilmemiş) –

+0

@VincentSels Bu mükemmel çalıştı! Tek bir blokta, false'den true'a doğru, derinlemesine iç içe geçirilemez bir nesnede tüm booleanları değiştirmeye ne dersiniz? Örneğin: options = fromJS ({one: {selected: false}, two: {selected: false}}). React'tayım ve nesne boyunca yinelemeye çalışıyorum ve setIn'i kullanın, ancak durum yalnızca son anahtar kümesi için ayarlanmış olur. –