2017-01-16 72 views
2

我正在嘗試使用Immutable.js。所以我使用了Map對象,並且我有一個2字段的前綴。Immutable.js在地圖中更新一個多重鍵值

const initialState = Map({ 
    isUserAuthorized : false, 
    pending : false 
}); 

我想更新兩者。我該怎麼做?我試圖使用這樣的標準更新方法:

state.update("isUserAuthorized",() => true, "pending",() => false); 

但它不能以某種方式工作。所以我只有一個想法 - 只更新特定的密鑰,然後對其他密鑰進行相同的操作並返回結果。

但我認爲這是一個不太完美的想法。也許還有其他正常的變體?謝謝你的幫助!

P.S.我發現,這是可以做到通過設置withMutations,如:

initialState.withMutations(map => { 
      map.set("isUserAuthorized", true).set("pending", false); 
     }) 

這是不是真的這麼難在地圖更新多個值嗎?

回答

3

您可以使用.set()

const initialState = Map({ 
    isUserAuthorized : false, 
    pending : false 
}); 

initialState = initialState.set('isUserAuthorized', true); 
initialState = initialState.set('pending', false); 

如果你不想重蹈覆轍。你可以創建一個函數來傳遞多個參數。

另一種方法是用.merge()

const newState = initialState.merge({ 
    isUserAuthorized: true, 
    pending: false 
}); 

或鏈接多套:

initialState = initialState.set('isUserAuthorized', true) 
    .set('pending', false) 
    .set('key3', 'value3'); 
+0

偉業嗨!謝謝您的回答。但是,實際上,是否有可能在一行中做到這一點?像 設置('isUserAuthorized',1).set('pending',z) – Velidan

+0

非常感謝你的朋友! – Velidan