Javascript immer如何使用贴图和集合处理对象关键点?

Javascript immer如何使用贴图和集合处理对象关键点?,javascript,immer.js,Javascript,Immer.js,状态“地图的键永远不会被绘制!这样做是为了避免混淆语义并保持键在引用上总是相等”,但我很难理解这是什么意思 我希望这意味着在草稿Map/Set中使用草稿对象作为键将自动取消对键的引用,就像我调用了例如Map.Set(原始(键)|键,值)一样。然而,情况似乎并非如此,我不明白这句话的意思 这里有一些例子来说明我的意思。我希望所有这些日志都true const{enableMapSet,product}=immer; enableMapSet(); 常量集合={ 映射:新建映射(), set:ne

状态“地图的键永远不会被绘制!这样做是为了避免混淆语义并保持键在引用上总是相等”,但我很难理解这是什么意思

我希望这意味着在草稿
Map
/
Set
中使用草稿对象作为键将自动取消对键的引用,就像我调用了例如
Map.Set(原始(键)|键,值)
一样。然而,情况似乎并非如此,我不明白这句话的意思

这里有一些例子来说明我的意思。我希望所有这些日志都
true

const{enableMapSet,product}=immer;
enableMapSet();
常量集合={
映射:新建映射(),
set:new set(),
storedAsObject:{},
storedAsDraft:{},
};
collection.set.add(collection.storedAsObject);
collection.map.set(collection.storedAsObject,'value');
const newCollection=生产(收集,(草稿)=>{
console.log(draft.set.has(draft.storedAsObject));//false
console.log(draft.map.has(draft.storedAsObject));//false
draft.set.add(draft.storedAsDraft);
draft.map.set(draft.storedAsDraft,'value');
});
console.log(newCollection.set.has(newCollection.storedAsDraft));//真的
console.log(newCollection.map.has(newCollection.storedAsDraft));//错误

这意味着,如果你抓取地图的关键点,它们是对象,你就不会得到草图(就像抓取值一样),而是原始对象

所以你不应该改变地图中使用的键。(例如,
Array.from(draftMap.keys())[0]。计数器+
不会由Immer处理)