2017-01-08 2 views
1

J'utilise pepperoni-app-kit pour reac-native qui vient avec Immutable.js. Je n'ai jamais utilisé Immutable.js avant et je trouve vraiment difficile d'effectuer une tâche simpleComment effectuer une opération push dans une carte et des listes Immutable.js imbriquées.?

Je veux pousser un message dans la liste des messages, qui est dans une carte.

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',...})) 

Comment écrire ce code ES6 avec 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

double possible de [en immutablejs, comment pousser une nouvelle donnée à une carte dont la valeur est un tableau] (http://stackoverflow.com/questions/31648907/in-immutablejs-how-to-push-a-new-data-to-a-map-which-value-is-an-array) – AzMoo

Répondre

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); 
    }); 
});