你好我正在嘗試更新這個ImmutableJs樹,但有一些問題,也許有人可以幫助我。Immutablejs - 使用immutablejs更新深層嵌套樹
下面是代碼:
let state = Immutable.Map();
var state1 = state.merge({
event: {
days: [
{
date: 1,
sessions: [
{
id: 1,
name: 2,
startTime: 1,
endTime: 1,
description: 1,
detailsLink: 1,
details: {visible: false}
},
{
id: 2,
name: 2,
startTime: 2,
endTime: 2,
description: 2,
detailsLink: 2,
details: {visible: false}
},
{
id: 3,
name: 3,
startTime: 3,
endTime: 3,
description: 3,
detailsLink: 3,
details: {visible: false}
}
]
},
{
date: 2,
sessions: [
{
id: 1,
name: 2,
startTime: 1,
endTime: 1,
description: 1,
detailsLink: 1,
details: {visible: false}
},
{
id: 2,
name: 2,
startTime: 2,
endTime: 2,
description: 2,
detailsLink: 2,
details: {visible: false}
},
{
id: 3,
name: 3,
startTime: 3,
endTime: 3,
description: 3,
detailsLink: 3,
details: {visible: false}
}
]
}
]
}
});
const state2 = state1.setIn(['event','days'], state1.getIn(['event','days']).map(day => {
return day.get('sessions').map(session => {
let isVisible = session.get('details').toJS();
if(!isVisible.visible) {
return session.setIn(['details','visible'],true);
}
})
}))
console.log(state1.toJS());
console.log(state2.toJS());
我能夠更新集合。問題是這兩棵樹不再一樣了。在第一個日期鍵是一個對象,在第二個日期鍵是一個數組。
我知道問題與days.get('會話')返回一個列表,而不是地圖。但不知道如何使其工作。
這是一個jsbin的代碼。
https://jsbin.com/mejaxelobe/1/edit?html,js,output
感謝