/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow * @format */ 'use strict'; import {RNTesterThemeContext} from '../../components/RNTesterTheme'; import React from 'react'; import { Button, Platform, StyleSheet, Text, TextInput, View, } from 'react-native'; class XHRExampleFetch extends React.Component { responseURL: ?string; responseHeaders: ?Object; intervalId: ?IntervalID; constructor(props: any) { super(props); this.state = { responseText: null, }; this.responseURL = null; this.responseHeaders = null; this.intervalId = null; } componentWillUnmount() { if (this.intervalId != null) { clearInterval(this.intervalId); this.intervalId = null; } } submit(uri: string) { // $FlowFixMe[unused-promise] fetch(uri) .then(response => { this.responseURL = response.url; this.responseHeaders = response.headers; return response.text(); }) .then(body => { this.setState({responseText: body}); }); } _renderHeaders(): null | Array { if (!this.responseHeaders) { return null; } const responseHeaders: Array = []; const keys = Object.keys(this.responseHeaders.map); for (let i = 0; i < keys.length; i++) { const key = keys[i]; // $FlowFixMe[incompatible-use] const value = this.responseHeaders.get(key); responseHeaders.push( {key}: {value} , ); } return responseHeaders; } startRepeatedlyFetch() { // Clear any existing interval first if (this.intervalId != null) { clearInterval(this.intervalId); } const doRequest = () => { const url = 'https://microsoftedge.github.io/Demos/json-dummy-data/5MB-min.json'; fetch(url, { method: 'GET', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, }) .then(() => { console.log('fetch one time'); }) .catch(error => console.error(error)); }; this.intervalId = setInterval(doRequest, 500); } render(): React.Node { const responseURL = this.responseURL ? ( Server response URL: {this.responseURL} ) : null; const responseHeaders = this.responseHeaders ? ( Server response headers: {this._renderHeaders()} ) : null; const response = this.state.responseText ? ( Server response: ) : null; return ( {theme => ( <>