我正在尝试使用Immutable.js。所以我使用了Map对象,前面有两个字段。
const initialState = Map({
isUserAuthorized : false,
pending : false
});
我想更新两者。我怎么能这样做?我尝试使用像这样的标准Update方法:
state.update( "isUserAuthorized", () => true, "pending", () => false);
但它不是以某种方式工作。所以我只有一个想法 - 只更新特定的密钥,之后对其他密钥执行相同的操作并返回结果。
但我认为这不是一个完美的想法。也许存在其他正常变体?谢谢你的帮助!
P.S。我发现它可以通过设置和 withMutations 来完成,如:
initialState.withMutations(map => {
map.set("isUserAuthorized", true).set("pending", false);
})
但是在Map中更新多个值真的很难吗?
答案 0 :(得分:4)
您可以使用.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');
答案 1 :(得分:0)
有点陈旧的帖子,但如果这有助于其他人,我只是不得不在昨天解决这个问题。这就是我最终要做的事情。
如果您想将 all 更改为相同的键,则可以映射。
const initialState = Map({
isUserAuthorized : false,
pending : false
});
const newState = initialState.map(() => true)
// { isUserAuthorized: true, pending: true }
如果您要设置特定键,则在地图中添加条件或三元表达式,仅更新相关内容。这是一个快速而又肮脏的例子。
const initialState = Map({
isUserAuthorized : false,
pending : false,
dontChangeMe: false
});
const newState = initialState.map((val, key) => (
key === 'isUserAuthorized' || key === 'pending' ? true : value
)
// { isUserAuthorized: true, pending: true, dontChangeMe: false }
如果你想变得聪明并且可以重复使用,你可以制作一个curried实用程序来传递目标键列表,然后只需调用你想要它们的值。