diff --git a/src/vanilla/shallow.ts b/src/vanilla/shallow.ts index 84b1c42d..3f35ec50 100644 --- a/src/vanilla/shallow.ts +++ b/src/vanilla/shallow.ts @@ -40,10 +40,14 @@ export function shallow(objA: T, objB: T): boolean { nextA.value.length === 2 && nextB.value.length === 2 ) { - return compareMapLike( - objA as Iterable<[unknown, unknown]>, - objB as Iterable<[unknown, unknown]>, - ) + try { + return compareMapLike( + objA as Iterable<[unknown, unknown]>, + objB as Iterable<[unknown, unknown]>, + ) + } catch { + // fallback + } } while (!nextA.done && !nextB.done) { if (!Object.is(nextA.value, nextB.value)) { diff --git a/tests/vanilla/shallow.test.tsx b/tests/vanilla/shallow.test.tsx index 07f0561e..481aa6b1 100644 --- a/tests/vanilla/shallow.test.tsx +++ b/tests/vanilla/shallow.test.tsx @@ -97,6 +97,11 @@ describe('shallow', () => { const b = new URLSearchParams({ zustand: 'shallow' }) expect(shallow(a, b)).toBe(false) }) + + it('should work with nested arrays (#2794)', () => { + const arr = [1, 2] + expect(shallow([arr, 1], [arr, 1])).toBe(true) + }) }) describe('unsupported cases', () => {