В этой истории мы просто займемся проверкой доступности Интернета
Один из членов моей команды (Тамил Пракаш) разрешил мне эту потребность в одном из проектов нашего клиента. Эта история призвана заставить его гордиться своей работой.
Наша проблема
В React-native мы столкнулись с проблемой. Что нам нужно переключать экран ошибки при включении или выключении Интернета. Я передал эту проблему своей команде, и они заставили меня гордиться своим решением.
Во-первых, нам нужно установить react-native-community / NetInfo.
npm install @react-native-community/netinfo --save
Затем начните переходить к нашему коду,
- Импортируйте пакет в свой класс,
import NetInfo from '@react-native-community/netinfo';
2. Создайте класс и экспортируйте его. Назовем его здесь NetworkManager.
class NetworkManagerClass { } const NetworkManager = new NetworkManagerClass(); //singleton object export default NetworkManager;
3. Объявите некоторые переменные, которые будут контролировать интернет-покрытие внутри конструктора.
constructor() { this.IsInternetAvailable = true; // internet avail bool this.ConnectionType = undefined; // Wifi or mobile data this._listeners = []; // internet change callbacks this.Initialize(); }
4. Объявите функцию, мы назвали ее Инициализировать и добавили в нее слушателя.
Initialize() { NetInfo.addEventListener((connectionInfo)=> {this.ConnectionChanged(connectionInfo)}); this.CheckAndUpdateConnection(); }
5. Теперь нам нужно создать асинхронную функцию для изменения фона в Интернете.
async CheckAndUpdateConnection() { let connectionInfo = await NetInfo.fetch(); this.IsInternetAvailable = connectionInfo.isInternetReachable; this.ConnectionType = connectionInfo.type; return this.IsInternetAvailable; }
6. Теперь создайте еще одну функцию для регистрации обратного вызова соединения.
RegisterConnectionChangeCallback(event) { this._listeners.push(event); }
7. Создайте другую функцию для события «Соединение изменено».
ConnectionChanged(connectionInfo) { this.IsInternetAvailable = connectionInfo.isInternetReachable; this.ConnectionType = connectionInfo.type; for(var i = 0; i < this.Listeners.length; i++) { this._listeners[i](this.IsInternetAvailable, this.ConnectionType); } }
Теперь ваш окончательный код выглядит так:
import NetInfo from '@react-native-community/netinfo'; class NetworkManagerClass { constructor() { this.IsInternetAvailable = true; // internet avail bool this.ConnectionType = undefined; // Wifi or mobile data this._listeners = []; // register for callbacks this.Initialize(); } Initialize() { NetInfo.addEventListener((connectionInfo)=>{this.ConnectionChanged(connectionInfo)}); this.CheckAndUpdateConnection(); } async CheckAndUpdateConnection() { let connectionInfo = await NetInfo.fetch(); this.IsInternetAvailable = connectionInfo.isInternetReachable; this.ConnectionType = connectionInfo.type; return this.IsInternetAvailable; } RegisterConnectionChangeCallback(event) { this._listeners.push(event); } ConnectionChanged(connectionInfo) { this.IsInternetAvailable = connectionInfo.isInternetReachable; this.ConnectionType = connectionInfo.type; for(var i = 0; i < this.Listeners.length; i++) { this._listeners[i](this.IsInternetAvailable, this.ConnectionType); } } } const NetworkManager = new NetworkManagerClass(); export default NetworkManager;
8. Теперь импортируйте и с легкостью используйте этот класс в своем компоненте.
Наконец-то мы получили это,
Я надеюсь, что это будет полезно для вас, все заслуги моей команде.
Спасибо,