2017-01-16 56 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