/** * Copyright (c) 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * The examples provided by Facebook are for non-commercial testing and * evaluation purposes only. * * Facebook reserves all rights not expressly granted. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * @flow * @providesModule NetInfoExample */ 'use strict'; const React = require('react'); const ReactNative = require('react-native'); const { NetInfo, Text, View, TouchableWithoutFeedback, } = ReactNative; class ConnectionInfoSubscription extends React.Component { state = { connectionInfoHistory: [], }; componentDidMount() { NetInfo.addEventListener( 'change', this._handleConnectionInfoChange ); } componentWillUnmount() { NetInfo.removeEventListener( 'change', this._handleConnectionInfoChange ); } _handleConnectionInfoChange = (connectionInfo) => { const connectionInfoHistory = this.state.connectionInfoHistory.slice(); connectionInfoHistory.push(connectionInfo); this.setState({ connectionInfoHistory, }); }; render() { return ( {JSON.stringify(this.state.connectionInfoHistory)} ); } } class ConnectionInfoCurrent extends React.Component { state = { connectionInfo: null, }; componentDidMount() { NetInfo.addEventListener( 'change', this._handleConnectionInfoChange ); NetInfo.fetch().done( (connectionInfo) => { this.setState({connectionInfo}); } ); } componentWillUnmount() { NetInfo.removeEventListener( 'change', this._handleConnectionInfoChange ); } _handleConnectionInfoChange = (connectionInfo) => { this.setState({ connectionInfo, }); }; render() { return ( {this.state.connectionInfo} ); } } class IsConnected extends React.Component { state = { isConnected: null, }; componentDidMount() { NetInfo.isConnected.addEventListener( 'change', this._handleConnectivityChange ); NetInfo.isConnected.fetch().done( (isConnected) => { this.setState({isConnected}); } ); } componentWillUnmount() { NetInfo.isConnected.removeEventListener( 'change', this._handleConnectivityChange ); } _handleConnectivityChange = (isConnected) => { this.setState({ isConnected, }); }; render() { return ( {this.state.isConnected ? 'Online' : 'Offline'} ); } } class IsConnectionExpensive extends React.Component { state = { isConnectionExpensive: (null : ?boolean), }; _checkIfExpensive = () => { NetInfo.isConnectionExpensive().then( isConnectionExpensive => { this.setState({isConnectionExpensive}); } ); }; render() { return ( Click to see if connection is expensive: {this.state.isConnectionExpensive === true ? 'Expensive' : this.state.isConnectionExpensive === false ? 'Not expensive' : 'Unknown'} ); } } exports.title = 'NetInfo'; exports.description = 'Monitor network status'; exports.examples = [ { title: 'NetInfo.isConnected', description: 'Asynchronously load and observe connectivity', render(): React.Element { return ; } }, { title: 'NetInfo.update', description: 'Asynchronously load and observe connectionInfo', render(): React.Element { return ; } }, { title: 'NetInfo.updateHistory', description: 'Observed updates to connectionInfo', render(): React.Element { return ; } }, { platform: 'android', title: 'NetInfo.isConnectionExpensive (Android)', description: 'Asynchronously check isConnectionExpensive', render(): React.Element { return ; } }, ];