diff --git a/.changeset/chatty-humans-unite.md b/.changeset/chatty-humans-unite.md new file mode 100644 index 00000000..6408b40a --- /dev/null +++ b/.changeset/chatty-humans-unite.md @@ -0,0 +1,5 @@ +--- +'@tanstack/react-store': patch +--- + +fix(react): use Object.is instead of === in defaultCompare to correctly handle NaN and -0 edge cases diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3d9c21b9..4818f83a 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -13,6 +13,7 @@ env: permissions: contents: read pull-requests: write + issues: write jobs: test: diff --git a/docs/framework/react/reference/functions/useStore.md b/docs/framework/react/reference/functions/useStore.md index 680155b5..6b29b11d 100644 --- a/docs/framework/react/reference/functions/useStore.md +++ b/docs/framework/react/reference/functions/useStore.md @@ -12,7 +12,7 @@ function useStore( compare): T; ``` -Defined in: [useStore.ts:13](https://github.com/TanStack/store/blob/main/packages/react-store/src/useStore.ts#L13) +Defined in: [useStore.ts:14](https://github.com/TanStack/store/blob/main/packages/react-store/src/useStore.ts#L14) ## Type Parameters diff --git a/packages/react-store/src/useStore.ts b/packages/react-store/src/useStore.ts index 70e8c2e7..63e2b104 100644 --- a/packages/react-store/src/useStore.ts +++ b/packages/react-store/src/useStore.ts @@ -6,8 +6,9 @@ type SyncExternalStoreSubscribe = Parameters< typeof useSyncExternalStoreWithSelector >[0] +/** Comparator using Object.is to correctly handle NaN and -0 edge cases. */ function defaultCompare(a: T, b: T) { - return a === b + return Object.is(a, b) } export function useStore(