2016-12-29 7 views
0

У меня есть следующие состояния:Объединение только один вложенный свойство в редукторе состоянии

new Map({ 
    data: new Map({ 
     all: null, 
     recent: null 
    }), 
    filters: new Map({ 
     pagination: new Map({ 
      currentPage: 1 
     }), 
     sortBy: new Map({ 
      key: 'id', 
      order: 'desc' 
     }) 
    }), 
    various: new Map() 
} 

И я хочу, чтобы изменить только currentPage собственность, оставляя sortBy один, как это:

case PAGINATE: 
    return state.merge({ 
     filters: new Map({ 
      pagination: new Map({ 
       currentPage: action.response 
      }) 
     }) 
    }) 

Но вместо этого, sortBy удаляется с filters, я должен сделать что-то подобное, чтобы он работал правильно:

case PAGINATE: 
    return state.merge({ 
     filters: new Map({ 
      pagination: new Map({ 
       currentPage: action.response 
      }), 
      sortBy: new Map({ 
       key: state.getIn(['filters', 'sortBy', 'key']), 
       order: state.getIn(['filters', 'sortBy', 'order']) 
      }) 
     }) 
    }) 

Есть ли лучший способ сделать это?

ответ

0

Вы можете, как это

return state.merge({ 
    filters: state.get('filters').merge({ 
     pagination: new Map({ 
      currentPage: action.response 
     }) 
    }) 
}) 

Подробнее от here

0

В вашем случае, вы можете использовать mergeIn, который представляет собой сочетание updateIn и merge, возвращающегося новую карту, но выполняя слияние в точке, полученной при помощи ключа.

Так что ваш код будет выглядеть следующим образом:

case PAGINATE: 
    return state.mergeIn(['filters', 'pagination'], { 
    currentPage: action.response 
    }) 

Подробнее о mergeIn от here.