我有一个使用Managed workflow的世博会应用程序。应用程序需要检查互联网连接是否可用。
import { NetInfo } from 'react-native'
,因为navigator.onLine
而这样做,因为全局变量似乎不可用。我该怎么办?
发布于 2019-06-20 03:14:46
使用react-native
的NetInfo
。
是的,它被弃用了,因为他们计划在下一个版本的react-native
中删除它,以支持社区版本。然而,它是完全有效的,现在仍然可以使用,只要确保在Expo SDK
的下一个版本发布时检查是否有破坏性的更改。
当react-native
将其删除时,世博会很可能会将其纳入他们的管理工作流中,或者提供一个不需要从世博会弹出的替代方案。
发布于 2019-08-25 04:23:44
Expo SDK34已经包含了NetInfo API
。
您可以在这里查看他们关于SDK34的文档https://docs.expo.io/versions/v34.0.0/sdk/netinfo
以下是latest version文档的链接
发布于 2019-06-20 03:29:42
这真的很难定义一个设备是否有互联网,仅仅通过失败的stackoverflow.com/a/189443/7602110请求,你可以说你有互联网,但不是那么可靠。你可能想去一些像google.com这样的可靠网站上看看,我有一个变通办法,但我并不推荐,这取决于你。
您可以从React Native本身使用Linking.canOpenUrl()
方法,该方法将返回一个Promise对象。当确定是否可以处理给定的URL时,promise被解析,并且第一个参数是它是否可以被打开。
然后添加一个请求,如果响应状态为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',
},
});
https://stackoverflow.com/questions/56669908
复制相似问题