diff --git a/ui/src/Components/Grid/UpgradeNeeded/index.js b/ui/src/Components/Grid/UpgradeNeeded/index.js
index df3d80c1b..725ce352f 100644
--- a/ui/src/Components/Grid/UpgradeNeeded/index.js
+++ b/ui/src/Components/Grid/UpgradeNeeded/index.js
@@ -11,7 +11,8 @@ import "csshake/scss/csshake-slow.scss";
const UpgradeNeeded = ({ newVersion, reloadAfter }) => {
useEffect(() => {
- setTimeout(window.location.reload, reloadAfter);
+ const timer = setTimeout(() => window.location.reload(), reloadAfter);
+ return () => clearTimeout(timer);
}, [reloadAfter]);
return (
diff --git a/ui/src/Components/Grid/UpgradeNeeded/index.test.js b/ui/src/Components/Grid/UpgradeNeeded/index.test.js
index cbeba45bc..eca9b8a17 100644
--- a/ui/src/Components/Grid/UpgradeNeeded/index.test.js
+++ b/ui/src/Components/Grid/UpgradeNeeded/index.test.js
@@ -34,4 +34,16 @@ describe("", () => {
jest.runOnlyPendingTimers();
expect(reloadSpy).toBeCalled();
});
+
+ it("stops calling window.location.reload after unmount", () => {
+ const reloadSpy = jest
+ .spyOn(global.window.location, "reload")
+ .mockImplementation(() => {});
+ const tree = mount(
+
+ );
+ tree.unmount();
+ jest.runOnlyPendingTimers();
+ expect(reloadSpy).not.toBeCalled();
+ });
});