diff --git a/__tests__/map-set.js b/__tests__/map-set.js index 7ba25927..faa46803 100644 --- a/__tests__/map-set.js +++ b/__tests__/map-set.js @@ -235,5 +235,14 @@ function runBaseTest(name, useProxies, autoFreeze, useListener) { }) expect(Array.from(set).sort()).toEqual([1, 2, 3]) }) + + test("#627 - new map key with value=undefined", () => { + const map = new Map() + const map1 = produce(map, draft => { + draft.set("key", undefined) + }) + expect(map1.has("key")).toBe(true) + expect(map1.get("key")).toBe(undefined) + }) }) } diff --git a/src/plugins/mapset.ts b/src/plugins/mapset.ts index 8e5b111c..8bb2d096 100644 --- a/src/plugins/mapset.ts +++ b/src/plugins/mapset.ts @@ -80,7 +80,7 @@ export function enableMapSet() { p.set = function(key: any, value: any) { const state: MapState = this[DRAFT_STATE] assertUnrevoked(state) - if (latest(state).get(key) !== value) { + if (!latest(state).has(key) || latest(state).get(key) !== value) { prepareMapCopy(state) markChanged(state) state.assigned_!.set(key, true)