Je souhaite que lorsque la vue Web ne dispose pas d'Internet, affiche un message qui n'a pas Internet. J'ai cherché des choses à ce sujet et je ne les ai pas trouvées. Est-ce que quelqu'un peut m'aider ? Désolé, je suis nouveau avec react-native.
MODIFIER 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', } }); `
J'ai édité le code en fonction de l'aide et je suis arrivé à ce résultat, cependant je crois que si la personne a connecté Internet mobile et n'a pas de données mobiles peut avoir des problèmes.
3 Réponses :
WebView de react-native a un appel d'accessoires onMessage
, vous pouvez l'utiliser pour savoir quelle réponse URL lorsque vous n'avez pas Internet.
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} ... />
J'espère vous aider, je ne me souviens pas exactement comment l'utiliser, mais je pense que c'est une bonne façon de commencer
Merci, mais je ne pense pas que je pourrais le faire de cette façon.
Vous pouvez utiliser l'événement onError
de WebView
comme ceci:
//declarations and imports state={isError:false} render(){ return( <WebView onError={()=>alert("Something went wrong")} /> )}
Si vous voulez savoir s'il y a Internet ou non vous gardez une trace de l'erreur de onError
.
Lors de mes recherches sur le sujet, j'ai trouvé ce lien là où utilisé Netinfo comment pourrais-je l'utiliser avec onerror?
Vous pouvez utiliser React Native NetInfo , voici un exemple tiré de la documentation:
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 );
Si vous souhaitez rechercher une URL spécifique, vous pouvez envoyer une requête et mettre à jour l'état
laissez req = wait fetch (' https://www.someurl.com '); laissez isConnected = req.status === 200;
comment puis-je afficher une page d'erreur en utilisant netinfo? et je pense le supprimer si quelqu'un active Internet.
y a-t-il un moyen de savoir si une URL est active, par exemple un ping. dans la même URL de vue Web?
pour vérifier la connectivité en général, voici un exemple de reactnativecode.com/… en utilisant NetInfo
pour rechercher une URL spécifique, vous pouvez utiliser fetch, je vais l'ajouter à la réponse
vous pouvez désactiver la connexion dans le simulateur pour l'essayer