2

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'
    }
  }  
})
4

1 に答える 1