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)
; }