diff --git a/packages/react-meteor-data/suspense/useTracker.tests.js b/packages/react-meteor-data/suspense/useTracker.tests.js
index e1c07c77..5a37f9ea 100644
--- a/packages/react-meteor-data/suspense/useTracker.tests.js
+++ b/packages/react-meteor-data/suspense/useTracker.tests.js
@@ -428,3 +428,29 @@ Meteor.isClient &&
);
}
);
+
+Meteor.isClient &&
+ runForVariants(
+ 'suspense/useTracker - component unmount in Strict Mode',
+ async function (test, useTrackerFn) {
+ const { simpleFetch } = setupTest();
+
+ const Test = () => {
+ useTrackerFn('TestDocs', simpleFetch);
+
+ return null;
+ };
+
+ const { queryByText, findByText, unmount } = render(, {
+ container: document.createElement('container'),
+ wrapper: TestSuspense,
+ reactStrictMode: true,
+ });
+
+ await new Promise((resolve) => setTimeout(resolve, 100));
+
+ unmount();
+
+ test.isTrue(true, 'should handle unmount correctly in Strict Mode');
+ }
+ );
diff --git a/packages/react-meteor-data/suspense/useTracker.ts b/packages/react-meteor-data/suspense/useTracker.ts
index 24b29620..9f6367f9 100644
--- a/packages/react-meteor-data/suspense/useTracker.ts
+++ b/packages/react-meteor-data/suspense/useTracker.ts
@@ -131,8 +131,11 @@ export function useTrackerSuspenseNoDeps(key: string, reactiveFn: IReac
// stop the computation on unmount
return () => {
- refs.computation?.stop()
- delete refs.computation
+ if (refs.computation) {
+ refs.computation.stop()
+ delete refs.computation
+ }
+
refs.isMounted = false
}
}, [])
@@ -192,8 +195,11 @@ export const useTrackerSuspenseWithDeps =
refs.isMounted = true
return () => {
- refs.computation.stop()
- delete refs.computation
+ if (refs.computation) {
+ refs.computation.stop()
+ delete refs.computation
+ }
+
refs.isMounted = false
}
}, deps)