redux reducer の状態として不変オブジェクトがあり、オブジェクトをリストに追加/更新しようとしています。
これが私のレデューサーです:
import { fromJS } from 'immutable'
const initialState = fromJS({
editable: true
})
export default (state = initialState, action) => {
switch(action.type) {
case 'CONTENT_MODE': {
return state.set('editable', action.editable ? false : true)
}
case 'UPDATE_CONTENT': {
return state.set(action.page, action.content)
// action.page = String
// action.content = {}
}
default: {
return state
}
}
}
オブジェクトをページ キーに追加したいのですが、現在存在する場合は値を更新します。コールバックの updateIn と add() を試しましたが、immutable.js は初めてで、正しくアプローチする方法がわかりません。
set() メソッドは「ページ」値を完全に書き換えますが、値をプッシュして存在する場合にのみ設定する必要があるため、次のようになります。
例
const initialState = fromJS({
editable: true,
home: {
title: {
name: 'this is the name',
value: 'this is the value'
},
body: {
name: 'this is the name',
value: 'this is the value'
}
},
page1: {
title: {
name: 'this is the name',
value: 'this is the value'
},
body: {
name: 'this is the name',
value: 'this is the value'
}
}
})