そのため、gatsby サイトに約 1 秒間オーバーレイを表示して、後ろに正しいブレークポイントをロードできるようにしています。どうすればこれを達成できますか?
そこで、Overlay をロードし、一定時間後に消えるように Interval と State を設定しました。しかし、各ページがオーバーレイをリロードした後に問題が再び発生します。redux のような状態管理はありません。外部リンクからの更新または開始のたびにのみオーバーレイを表示する必要がありますが、内部リンクをクリックする必要はありません。
useEffect
マウントでのみレンダリングしてみましたが、内部リンクの変更が再マウントをトリガーするため、これはうまくいきません
Browser API onInitialClientRender を使用できることがわかりました。しかし、そこで生成された値に gatsby-browser.js の外部でアクセスする方法がわかりません。一般に、これらの API の使用方法を理解するのに問題があります。
customHooks.js
export function useInterval(callback, delay) {
const savedCallback = useRef()
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback
}, [callback])
// Set up the interval.
useEffect(() => {
function tick() {
savedCallback.current()
}
if (delay !== null) {
let id = setInterval(tick, delay)
return () => clearInterval(id)
}
}, [delay])
}
Layout.js
let [loadingIndicator, setLoadingIndicator] = useState(true)
const delay = 500
useInterval(() => {
setLoadingIndicator(false)
}, delay)
したがって、期待される結果は、最初のクライアント レンダリングで、オーバーレイをレンダリングするように指示する状態を設定するように指示する方法であり、この 1 つのレンダリングの後、オーバーレイのレンダリングを無効にするように状態を変更する必要があります。