import type { ComponentType } from 'react'; import React, { useEffect, useState } from 'react'; import { LoaderFallback } from './loader-fallback'; export const RegularComponent = () => { return ; }; export const UndefinedComponent = () => { return ; }; export const ChangingComponent = () => { const [current, setCurrent] = useState(() => Component); useEffect(() => { const intervalId = setInterval(() => { setCurrent((x?: ComponentType) => (x ? undefined : Component)); }, 2000); return () => clearInterval(intervalId); }, []); return ( (this will not timeout, and show only the loader) ); }; export const LongChangingComponent = () => { const [current, setCurrent] = useState(() => Component); useEffect(() => { const intervalId = setInterval(() => { setCurrent((x?: ComponentType) => (x ? undefined : Component)); }, 6000); return () => clearInterval(intervalId); }, []); return ( (this will timeout, showing the fallback component) ); }; function Component() { return ✓ actual component; } function Fallback() { return target is (undefined); }