Реагируй на родную веб-версию, когда нет интернета - PullRequest
0 голосов
/ 16 февраля 2019

Я хочу сделать, когда в веб-просмотре нет интернета, отображать сообщение, в котором нет интернета.Я искал вещи об этом и не нашел это.Кто-нибудь может мне помочь ?Извините, я новичок в реакции-нативном.

РЕДАКТИРОВАТЬ 1 `

import React, { Component } from 'react'
import { StyleSheet, Text, View, NetInfo } from 'react-native';
import WebViewComp from './web_view_comp.js'

export default class App extends Component {
   constructor(){
      super();
      this.state={
        connection_Status : ""
      }
    }
    componentDidMount() {
      NetInfo.isConnected.addEventListener(
          'connectionChange',
          this._handleConnectivityChange
      );
      NetInfo.isConnected.fetch().done((isConnected) => {
        if(isConnected == true){
          this.setState({connection_Status : "Online"})
        }
        else{
          this.setState({connection_Status : "Offline"})
        }
      });
    }


componentWillUnmount() {
  NetInfo.isConnected.removeEventListener(
      'connectionChange',
      this._handleConnectivityChange
  );
}

_handleConnectivityChange = (isConnected) => {
  if(isConnected == true){
      this.setState({connection_Status : "Online"})
    }
    else{
      this.setState({connection_Status : "Offline"})
    }
};


render() {
      if (this.state.connection_Status == "Online") {
         return (
            <WebViewComp/>
         )
      } else {
         return (
            <View style={styles.MainContainer}>
               <Text style={{fontSize: 20, textAlign: 'center', marginBottom: 20}}> Você está { this.state.connection_Status }</Text>
            </View>
         )
      }
   }
}
const styles = StyleSheet.create({
   MainContainer: {
     flex: 1,
     justifyContent: 'center',
     alignItems: 'center',
     backgroundColor: '#F5FCFF',
     padding: 20
   },

   TextStyle: {
     fontSize:20,
     textAlign: 'center',
   }

 });

`

Я отредактировал код в соответствии с помощью, и я пришел к этому результату,однако я считаю, что если у человека есть мобильный интернет и нет мобильных данных, могут возникнуть проблемы.

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

Вы можете использовать onError событие WebView, например:

//declarations and imports
state={isError:false}
render(){
   return(
       <WebView onError={()=>alert("Something went wrong")} />
       )}

Если вы хотите узнать, есть ли Интернет, вы отслеживаете ошибку от onError.

0 голосов
/ 16 февраля 2019

Вы можете использовать React Native NetInfo . Вот пример из документации:

NetInfo.isConnected.fetch().then(isConnected => {
  console.log('First, is ' + (isConnected ? 'online' : 'offline'));
});
function handleFirstConnectivityChange(isConnected) {
  console.log('Then, is ' + (isConnected ? 'online' : 'offline'));
  NetInfo.isConnected.removeEventListener(
    'connectionChange',
    handleFirstConnectivityChange
  );
}
NetInfo.isConnected.addEventListener(
  'connectionChange',
  handleFirstConnectivityChange
);

Если вы хотите проверить конкретный URL, вы можете отправить запрос и обновить состояние

let req = await fetch ('https://www.someurl.com'); let isConnected = req.status === 200;

0 голосов
/ 16 февраля 2019

WebView реагирует на вызов реквизита onMessage, вы можете использовать его, чтобы узнать, какой URL-адрес откликается, когда у вас нет Интернета.

onWebViewMessage(event: any) {
   let msgData;
    try {
        // msgData will have the url from webview
        // and event have another props
        msgData = event.nativeEvent.data;
        // check and do something
    } catch (err) {
        console.warn(err);
        return;
     }
     ...
}


<WebView
    source={{ uri: "http://www.youtube.com/" }}
    onMessage={this.onWebViewMessage}
    ...
 />

Я надеюсь помочь вам, я не помню точно, как это использовать, но я думаю, что это хороший способ начать

...