diff --git a/src/hooks/__tests__/useRemoteComponent.test.ts b/src/hooks/__tests__/useRemoteComponent.test.ts index 4a1ceab..7e32c5c 100644 --- a/src/hooks/__tests__/useRemoteComponent.test.ts +++ b/src/hooks/__tests__/useRemoteComponent.test.ts @@ -6,7 +6,10 @@ import { createUseRemoteComponent } from "../useRemoteComponent"; import React from "react"; jest.mock("react", () => ({ - useEffect: jest.fn(f => f()) + useEffect: jest.fn(f => f()), + useRef: jest.fn(s => ({ + current: s + })) })); const waitNextFrame = () => new Promise(resolve => setTimeout(resolve)); diff --git a/src/hooks/useRemoteComponent.ts b/src/hooks/useRemoteComponent.ts index 4911a5c..0fa915f 100644 --- a/src/hooks/useRemoteComponent.ts +++ b/src/hooks/useRemoteComponent.ts @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { useEffect, useState, useRef } from "react"; import createLoadRemoteModule from "@paciolan/remote-module-loader"; export interface UseRemoteComponentHook { @@ -16,10 +16,12 @@ export const createUseRemoteComponent = ( err: undefined, component: undefined }); + const latestUrl = useRef(url); useEffect(() => { let update = setState; update({ loading: true, err: undefined, component: undefined }); + latestUrl.current = url; loadRemoteModule(url) .then(module => update({ loading: false, err: undefined, component: module.default }) @@ -33,7 +35,9 @@ export const createUseRemoteComponent = ( }; }; }, [url]); - + if (latestUrl.current !== url) { + return [true, undefined, undefined]; + } return [loading, err, component]; };