UNPKG

create-expo-cljs-app

Version:

Create a react native application with Expo and Shadow-CLJS!

115 lines (102 loc) 2.51 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @noflow */ 'use strict'; const React = require('react'); const {StyleSheet, Text, TouchableHighlight, View} = require('react-native'); class XHRExampleHeaders extends React.Component { xhr: XMLHttpRequest; cancelled: boolean; constructor(props) { super(props); this.cancelled = false; this.state = { status: '', headers: '', contentSize: 1, downloaded: 0, }; } download() { this.xhr && this.xhr.abort(); const xhr = this.xhr || new XMLHttpRequest(); xhr.onreadystatechange = () => { if (xhr.readyState === xhr.DONE) { if (this.cancelled) { this.cancelled = false; return; } if (xhr.status === 200) { this.setState({ status: 'Download complete!', headers: xhr.getAllResponseHeaders(), }); } else if (xhr.status !== 0) { this.setState({ status: 'Error: Server returned HTTP status of ' + xhr.status + ' ' + xhr.responseText, }); } else { this.setState({ status: 'Error: ' + xhr.responseText, }); } } }; xhr.open( 'GET', 'https://httpbin.org/response-headers?header1=value&header2=value1&header2=value2', ); xhr.send(); this.xhr = xhr; this.setState({status: 'Downloading...'}); } componentWillUnmount() { this.cancelled = true; this.xhr && this.xhr.abort(); } render() { const button = this.state.status === 'Downloading...' ? ( <View style={styles.wrapper}> <View style={styles.button}> <Text>...</Text> </View> </View> ) : ( <TouchableHighlight style={styles.wrapper} onPress={this.download.bind(this)}> <View style={styles.button}> <Text>Get headers</Text> </View> </TouchableHighlight> ); return ( <View> {button} <Text>{this.state.headers}</Text> </View> ); } } const styles = StyleSheet.create({ wrapper: { borderRadius: 5, marginBottom: 5, }, button: { backgroundColor: '#eeeeee', padding: 8, }, }); module.exports = XHRExampleHeaders;