![](/img/trans.png)
[英]Firebase, detect how user connected (Google, Facebook, Email …)
[英]Detect if the user is connected to the internet?
我想將用戶路由到某個屏幕,以防他沒有連接到互聯網。
我只是無法檢測他是否已連接。
我試過這段代碼,但沒有奏效:
async componentWillMount()
{
if (!await NetInfo.isConnected)
{
this.props.navigation.navigate('Saved');
}
}
任何經過測試的解決方案建議?
嘗試await NetInfo.isConnected.fetch()
參考: https : //facebook.github.io/react-native/docs/netinfo.html#isconnected
您可以使用NetInfo
進行檢查。 為此,您必須像這樣添加connectionChange
事件偵聽器
componentDidMount() {
NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectionChange.bind(this));
NetInfo.isConnected.fetch().done(
(isConnected) => { this.setState({ isConnected: isConnected }); }
);
然后移除componentWillUnmount
中的事件監聽器
componentWillUnmount() {
NetInfo.isConnected.removeEventListener('connectionChange', this.handleConnectionChange);
}
最后是連接更改的處理程序方法。 我將狀態存儲在設備本地存儲中,您可以隨心所欲。
handleConnectionChange = (isConnected) => {
if (isConnected) {
//ToastAndroid.show('Data sync in process...', ToastAndroid.SHORT);
AsyncStorage.getItem('offlineData')
.then((json) => JSON.parse(json))
.then((data) => {
console.log(JSON.stringify(data));
});
}
else { ToastAndroid.show('You are offline.', ToastAndroid.SHORT); }
this.setState({ isConnected: isConnected });
}
不要忘記從react-native
添加NetInfo
:)
您的情況的另一種解決方案(不使用 isConnected 屬性的解決方案)是直接使用從事件處理程序返回的對象,如下所示:
componentDidMount() {
NetInfo.addEventListener('connectionChange', this.handleNetworkChange);
}
componentWillUnmount() {
NetInfo.removeEventListener('connectionChange', this.handleNetworkChange);
}
handleNetworkChange = (info) => {
if (info.type === 'none') {
this.props.navigation.navigate('Saved');
}
};
根據 NetInfo 文檔:
connectionChange 事件在網絡狀態改變時觸發。 事件處理程序的參數是一個帶有鍵的對象:
類型:A ConnectionType(如上所列)
有效類型:有效連接類型(上面列出)
連接類型可以是以下之一:無、wifi、蜂窩、未知。
理想情況下,您可以將此信息存儲到您的 redux 存儲中,並將偵聽器存儲到根組件中。
我們在使用 isConnected 時遇到了一個奇怪的錯誤,類似於您提到的@Gabriel Bleu 但對我們來說,NetInfo.isConnected.fetch() 僅在 Android 設備在一段時間不活動后喚醒時才返回 false。我們用它來離線顯示警告用戶,所以警告從未離開。 我在 Spencer Carli 的課程中找到了這個解決方案,它似乎效果更好,但根據您的需要,您可能希望將 isConnected 與上述代碼結合使用。
這是online
或offline
檢查的一個很好的例子,甚至您也可以獲得連接更改信息。 來源
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
);
您的代碼目前有兩個問題。
為了實現所需的行為,您應該做這樣的事情。
import NetInfo from "@react-native-community/netinfo";
class CheckConnection extends Component {
componentDidMount() {
NetInfo.fetch().then(state => {
handleConnectionState(state)
});
}
handleConnectionState(state) {
console.log("Connection type", state.type);
console.log("Is connected?", state.isConnected);
... your code to handle the lack of connection
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.