From c355b12133295c03849e4807d383688378549b3f Mon Sep 17 00:00:00 2001 From: David Heidrich Date: Fri, 23 Feb 2024 18:47:53 +0100 Subject: [PATCH] feat: use deep equal for state compare --- package.json | 7 ++++--- src/lib/store.ts | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 887b89f..4b9da89 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,6 @@ "engines": { "node": ">=14" }, - "dependencies": {}, "peerDependencies": { "history": ">=4", "immer": ">=9", @@ -117,7 +116,8 @@ "react": ">=16.8", "react-dom": ">=16.8", "zustand": ">=4.4.0", - "type-fest": ">=4" + "type-fest": ">=4", + "fast-deep-equal": "^3" }, "peerDependenciesMeta": { "next": { @@ -184,7 +184,8 @@ "typedoc": "^0.25.0", "typescript": "^5.2.2", "webpack": "^5.75.0", - "zustand": "^4.4.1" + "zustand": "^4.4.1", + "fast-deep-equal": "^3.1.3" }, "resolutions": { "lodash": "^4.17.21", diff --git a/src/lib/store.ts b/src/lib/store.ts index 87c2ac9..752880b 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -10,6 +10,7 @@ import { import { Mutate, StateCreator, StoreApi, UseBoundStore } from 'zustand' import { devtools, subscribeWithSelector } from 'zustand/middleware' import { createWithEqualityFn } from 'zustand/traditional' +import isDeepEqual from 'fast-deep-equal' import { shallow } from 'zustand/shallow' import { @@ -219,10 +220,10 @@ export const factoryParameters = < initialRegisterState.values ) if ( - initialRegisterState.values !== values || - initialRegisterState.initialValues !== initialValues || - currentState.initialValues !== initialValues || - currentState.values !== values + !isDeepEqual(initialRegisterState.values, values) || + !isDeepEqual(initialRegisterState.initialValues, initialValues) || + !isDeepEqual(currentState.initialValues, initialValues) || + !isDeepEqual(currentState.values, values) ) { setCurrentState({ values, initialValues }) }