У меня есть приложение Expo, использующее Управляемый рабочий процесс. Приложение должно проверить, доступно ли подключение к Интернету.
import { NetInfo } from 'react-native', потому что это устарело.navigator.onLine, потому что эта глобальная переменная недоступна.Что я должен делать?
@hongdevelop Вы не можете добавлять свои собственные модули или использовать react-native link с управляемым проектом Expo. docs.expo.io/versions/latest/introduction/faq/…
Модуль netinfo можно использовать без добавления модулей.
@hongdevelop Какой модуль NetInfo? Тот, который устарел?
NetInfo реактивного натива
Вы также можете использовать netinfo в expo, потому что вы можете использовать базовый модуль react-native в expo.
@hongdevelop Это тот, который устарел.





Используйте NetInfo из react-native.
Да, он устарел, потому что они планируют удалить его в следующей версии react-native в пользу версии для сообщества. Тем не менее, он полностью функционален и его все еще можно использовать, просто не забудьте проверить наличие критических изменений, когда будут выпущены следующие версии Expo SDK.
Вполне вероятно, что Expo включит его в свой управляемый рабочий процесс, когда react-native удалит его, или предоставит альтернативу, которая не потребует извлечения из Expo.
Очень сложно определить, есть ли у устройства интернет или нет stackoverflow.com/a/189443/7602110, просто по неудачным запросам XHR вы можете сказать, что у вас есть интернет, но это не так надежно. Вы хотели бы проверить некоторые надежные веб-сайты, такие как google.com, у меня есть обходной путь, но я на самом деле не рекомендую его, решать вам.
Вы можете использовать метод Linking.canOpenUrl() из самого React Native, который вернет объект Promise. Когда определяется, можно ли обработать данный URL-адрес, обещание разрешается, и первым параметром является то, можно ли его открыть.
Затем добавьте запрос, и если статус ответа будет 200, у вас должен быть интернет.

import React, { Component } from 'react';
import { Button, Text, View, StyleSheet, Linking } from 'react-native';
export default class App extends Component {
state = {
connection: false,
url: 'https://google.com',
};
checkInternt = () => {
Linking.canOpenURL(this.state.url).then(connection => {
if (!connection) {
this.setState({ connection: false });
} else {
fetch(this.state.url).then(res =>
this.setState({ connection: res.status !== 200 ? false : true })
);
}
});
};
componentDidMount() {
this.checkInternt();
}
handlePress = () => {
this.setState({
url:
this.state.url === 'https://google.com'
? 'http://someweirdurlthatdoesntwork.com'
: 'https://google.com',
});
this.checkInternt();
};
render() {
return (
<View style = {styles.container}>
<Text>
Connection:
<Text style = {{ color: this.state.connection ? 'green' : 'red' }}>
{` ${this.state.connection}`}
</Text>
</Text>
<Text>{this.state.url.replace(/\https?:///g, '')}</Text>
<Button onPress = {this.handlePress} title = "Change server url" />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'space-around',
alignItems: 'center',
},
});
Проверьте перекус: закуска.expo.io/@abranhe/check-internet
Expo SDK 34 уже включает NetInfo API.
Вы можете проверить их документацию для SDK 34 здесь https://docs.expo.io/versions/v34.0.0/sdk/netinfo
Вот ссылка на документацию для Последняя версия
Я не понимаю. Почему я должен вынимать его, чтобы использовать модуль netinfo, когда я использую Expo?