Immutable.js 更新 Map 中的值多键

Immutable.js update a value multiple key in Map

我正在尝试使用 Immutable.js。所以我使用了 Map 对象,我有 2 个字段用于 ex.

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

而且我想更新两者。我该怎么做?我尝试使用这样的标准更新方法:

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

但它无法正常工作。所以我只有一个想法——只更新特定的键,然后对其他键做同样的事情,然后 return 结果。

但我认为这是一个不太完美的想法。也许存在其他正常变体?感谢您的帮助!

P.S。我发现可以通过 setwithMutations 来完成,例如:

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

但是在Map中更新多个值真的那么难吗?

您可以使用 .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'); 

有点陈旧 post 但如果这对其他人有帮助,我昨天不得不弄清楚。这是我最后做的。

如果您想将所有键更改为相同,那么您可以映射。

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 实用程序来传递目标键列表,然后只需调用您希望它们成为的值即可。