import { useEffect, useState } from "react"
export default props => {
const { children, render, ready, fallback, delayMS } = props
const [showPlaceholder, setShowPlaceholder] = useState(false)
const [timeoutRef, setTimeoutRef] = useState(0)
useEffect(() => {
clearTimeout(timeoutRef)
if (ready) setShowPlaceholder(false)
else setTimeoutRef(setTimeout(() => setShowPlaceholder(true), delayMS))
return () => clearTimeout(timeoutRef)
}, [ready])
const rndr = children || render
return ready ? rndr(ready) : showPlaceholder ? fallback(ready) : null
}
|