2017-01-08 7 views
1

私はImmutable.jsに付属する反応ネイティブのために、pepperoni-app-kitを使用しています。以前はImmutable.jsを使ったことがなく、シンプルな仕事をするのが本当に難しいです。入れ子のImmutable.jsマップとリストでプッシュ操作を実行する方法。

マップ内のメッセージリストにメッセージをプッシュしたいと思います。 Immutable.jsでこれES6コードを書くための方法

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

someReducer.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); 
    }); 
}); 
関連する問題