🌐
[Vue3]オンラインか否かを判定・監視する
JavaScript のオンライン判定のおさらい
navigator.online
navigator.online
で、現在オンラインか否かを判定できます。
オンライン状態ならtrue
、オフライン状態ならfalse
になります。
console.log(navigator.online)
online
イベント / offline
イベント
navigator.online
は、あくまで現在のオンライン状態を取得するにすぎません。なので、「オンラインになったら何かをする」といった監視の処理はできません。
オンライン状態を監視するには、online
イベントとoffline
イベントを使用します。
オンラインになったらonline
イベントが発火され、オフラインになったらoffline
イベントが発火します。
window.addEventListener('online', () => {
console.log('オンラインになりました')
})
window.addEventListener('offline', () => {
console.log('オフラインになりました')
})
Vue3で使用する
リアクティブに判定・監視する
Vue 3でリアクティブにオンライン状態を判定・監視できるようにします。
navigator.online
を初期値として使い、online
イベントとoffline
イベントでオンライン状態を監視して切り替えます。
import { defineComponent, ref, watch } from 'vue'
export default defineComponent({
setup(){
const isOnline = ref(navigator.onLine)
window.addEventListener('online', () => {
isOnline.value = true
})
window.addEventListener('offline', () => {
isOnline.value = false
})
// 使い方
watch(
isOnline,
() => {
if(isOnline.value) {
console.log('オンラインです!')
} else {
console.log('オフラインです……')
}
},
{ immediate: true }
)
}
})
composableにする
汎用的に使えるように機能を切り出します。
useOnline.ts
import { ref } from 'vue'
export default function useOnline() {
const isOnline = ref(navigator.onLine)
window.addEventListener('online', () => {
isOnline.value = true
})
window.addEventListener('offline', () => {
isOnline.value = false
})
return { isOnline }
}
これを好きなタイミングで呼び出すことで、オンラインか否かの判定と監視を容易におこなえます。
import { defineComponent, watch } from 'vue'
import useOnline from './useOnline'
export default defineComponent({
setup(){
const { isOnline } = useOnline()
// 使い方
watch(
isOnline,
() => {
if(isOnline.value) {
console.log('オンラインです!')
} else {
console.log('オフラインです……')
}
},
{ immediate: true }
)
}
})
注意
navigator.online
やonline
/offline
イベントは、ブラウザによって判定条件が異なったりなど、全面的に信頼できない部分もあります。詳細は参考リンクなどをご覧の上、各自で十分にテストをおこなった上で使用するようにしてください。
Discussion