2017-01-08 2 views
1

Я использую pepperoni-app-kit для реагирования-native, который поставляется с Immutable.js. Я никогда не использовал Immutable.js раньше, и мне очень сложно выполнить простую задачу.Как выполнить операцию push во вложенной карте и списках Immutable.js.?

Я хочу нажать сообщение в списке сообщений, который находится внутри Карты.

someReducer.js

import {Map,List} from 'immutable'; 

const initialState = Map({isReady : false , messages : List([])}); 

// reducer switch case 
return state.update('messages',messages=>messages.concat(action.Message.payloadString); 
// not working 
//I also tried 
return state.get('messages').push(Immutable.Map({text:'some text',...})) 

Как написать этот ES6 код с Immutable.js

var newState = state; // copy state 
newState.messages.push({text:'hello world',...otherInfo}); // make changes 
return object.assign({},newState); // return a new object. 
+0

Возможный дубликат [в immutablejs, как выдвинуть новые данные на карту, значение которого является массив] (http://stackoverflow.com/questions/31648907/in-immutablejs-how-to-push-a-new-data-to-a-map-which-value-is-an-array) – AzMoo

ответ

2
describe('how-to-perform-push-operation-in-a-nested-immutable-js-map-and-lists',() => { 
    const initialState = Immutable.Map({ 
     isReady: false, 
     messages: Immutable.List([]), 
    }); 

    it('should `push` using List.update',() => { 
     const payload = 'some text'; 
     const updatedState = initialState.update('messages', 
      (list) => (list.push(payload)) 
     ); 
     // passes: 
     expect(updatedState.getIn(['messages', 0])).to.equal(payload); 
    }); 

    it('should `concat` using List.update',() => { 
     const multiMessagePayload = ['alpha', 'beta']; 
     const reUpdatedState = initialState.update('messages', 
      (list) => (list.concat(multiMessagePayload)) 
     ); 
     // passes: 
     expect(reUpdatedState.get('messages').size).to.equal(2); 
    }); 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^