विधि एक: विरासत ब्राउज़र API का उपयोग करना - Navigator.onLine
ब्राउज़र की ऑनलाइन स्थिति लौटाता है। संपत्ति एक बूलियन मान लौटाती है, जिसमें सही अर्थ ऑनलाइन और गलत अर्थ ऑफ़लाइन होता है। जब भी नेटवर्क से कनेक्ट करने की ब्राउज़र की क्षमता में बदलाव होता है, तो संपत्ति अपडेट भेजती है। अद्यतन तब होता है जब उपयोगकर्ता लिंक का अनुसरण करता है या जब कोई स्क्रिप्ट दूरस्थ पृष्ठ का अनुरोध करती है। उदाहरण के लिए, उपयोगकर्ता द्वारा इंटरनेट कनेक्शन खोने के तुरंत बाद उपयोगकर्ता द्वारा लिंक क्लिक करने पर संपत्ति झूठी वापस आनी चाहिए।
आप इसे अपने घटक जीवनचक्र में जोड़ सकते हैं:
Chrome देव टूल का उपयोग करके नीचे दिए गए कोड के साथ खेलें - नेटवर्क टैब के तहत "ऑनलाइन" को "ऑफ़लाइन" पर स्विच करें।
class App extends React.PureComponent {
state = { online: window.navigator.onLine }
componentDidMount() {
window.addEventListener('offline', this.handleNetworkChange);
window.addEventListener('online', this.handleNetworkChange);
}
componentWillUnmount() {
window.removeEventListener('offline', this.handleNetworkChange);
window.removeEventListener('online', this.handleNetworkChange);
}
handleNetworkChange = () => {
this.setState({ online: window.navigator.onLine });
}
render() {
return (
<div>
{ this.state.online ? 'you\'re online' : 'you\'re offline' }
</div>
);
}
}
ReactDOM.render(
<App />
, document.querySelector('#app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>
हालाँकि, मुझे लगता है कि यह वह नहीं है जो आप चाहते हैं, आप एक वास्तविक समय कनेक्शन सत्यापनकर्ता चाहते थे ।
विधि दो: इसका उपयोग करके इंटरनेट कनेक्शन की जाँच करना
यदि केवल बाहरी इंटरनेट कनेक्टिविटी काम कर रही है, तो आप केवल ठोस पुष्टि प्राप्त कर सकते हैं। सवाल यह है कि लागत कम करने के लिए आपको किस सर्वर पर कॉल करना चाहिए?
इसके लिए इंटरनेट पर कई समाधान हैं, जो किसी भी समापन बिंदु पर त्वरित 204 स्थिति के साथ प्रतिक्रिया करता है, जैसे कि:
- Google सर्वर पर कॉल करना (इसके लिए सबसे अधिक युद्ध-परीक्षण किया जा रहा है?)
- इसकी कैश्ड JQuery स्क्रिप्ट एंडपॉइंट को कॉल करना (भले ही सर्वर डाउन हो, तब भी आपको तब तक स्क्रिप्ट प्राप्त करने में सक्षम होना चाहिए जब तक आपके पास कनेक्शन है)
- स्थिर सर्वर से एक चित्र लाने का प्रयास करें (उदाहरण: https://ssl.gstatic.com/gb/images/v1_76783e20.png + date टाइमस्टैम्प कैशिंग रोकने के लिए)
IMO, यदि आप एक सर्वर पर इस रिएक्ट ऐप को चला रहे हैं, तो यह आपके अपने सर्वर पर कॉल करने के लिए सबसे अधिक समझ में आता है, आप /favicon.ico
कनेक्शन की जांच करने के लिए अपने लोड करने के लिए अनुरोध कर सकते हैं ।
(अपने सर्वर को बुलाने की) यह विचार इस तरह के रूप में कई पुस्तकालयों, द्वारा लागू किया गया है Offline
, is-reachable
और व्यापक रूप से समुदाय भर में प्रयोग किया जाता है। यदि आप सब कुछ अपने आप से लिखना नहीं चाहते हैं तो आप उनका उपयोग कर सकते हैं। (व्यक्तिगत रूप से मुझे is-reachable
सरल होने के लिए एनपीएम पैकेज पसंद है ।)
उदाहरण:
import React from 'react';
import isReachable from 'is-reachable';
const URL = 'google.com:443';
const EVERY_SECOND = 1000;
export default class App extends React.PureComponent {
_isMounted = true;
state = { online: false }
componentDidMount() {
setInterval(async () => {
const online = await isReachable(URL);
if (this._isMounted) {
this.setState({ online });
}
}, EVERY_SECOND);
}
componentWillUnmount() {
this._isMounted = false;
}
render() {
return (
<div>
{ this.state.online ? 'you\'re online' : 'you\'re offline' }
</div>
);
}
}
मेरा मानना है कि आपके पास जो वर्तमान में है वह पहले से ही ठीक है, बस सुनिश्चित करें कि यह सही समापन बिंदु कह रहा है।
इसी तरह के सवाल: