![](/img/trans.png)
[英]react.js: how to load local react.js instead of using online ones
[英]How to check online status in React.js?
我创建了一个 function 来检查应用程序是否在线。 但是,根据 MDN 文档, navigator.onLine
对我目前正在经历的 Chrome 和 Safari 给出了误报。 有没有其他方法可以解决这个当前的问题?
使用在线状态.ts:
import { useEffect, useState } from 'react'
const getOnlineStatus = (): boolean => {
return typeof navigator !== 'undefined' &&
typeof navigator.onLine === 'boolean'
? navigator.onLine
: true
}
const useOnlineStatus = (): boolean => {
const [onlineStatus, setOnlineStatus] = useState(getOnlineStatus())
const goOnline = () => setOnlineStatus(true)
const goOffline = () => setOnlineStatus(false)
useEffect(() => {
window.addEventListener('online', goOnline)
window.addEventListener('offline', goOffline)
return () => {
window.removeEventListener('online', goOnline)
window.removeEventListener('offline', goOffline)
}
}, [])
return onlineStatus
}
export default useOnlineStatus
您可以尝试的一种方法是向您自己的来源发送请求,以检查您的应用程序是否在线。
查询参数 (q) 是随机的,以避免缓存响应。
const isAppOnline = async() => {
if (!window.navigator.onLine) return false
const url = new URL(window.location.origin)
url.searchParams.set('q', new Date().toString())
try {
const response = await fetch(
url.toString(),
{ method: 'HEAD' },
)
return response.ok
} catch {
return false
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.