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。我发现可以通过 set 和 withMutations 来完成,例如:
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 实用程序来传递目标键列表,然后只需调用您希望它们成为的值即可。
我正在尝试使用 Immutable.js。所以我使用了 Map 对象,我有 2 个字段用于 ex.
const initialState = Map({
isUserAuthorized : false,
pending : false
});
而且我想更新两者。我该怎么做?我尝试使用这样的标准更新方法:
state.update( "isUserAuthorized", () => true, "pending", () => false);
但它无法正常工作。所以我只有一个想法——只更新特定的键,然后对其他键做同样的事情,然后 return 结果。
但我认为这是一个不太完美的想法。也许存在其他正常变体?感谢您的帮助!
P.S。我发现可以通过 set 和 withMutations 来完成,例如:
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 实用程序来传递目标键列表,然后只需调用您希望它们成为的值即可。