Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在React Native with hooks中将值发送到另一个屏幕?_Javascript_Android_Ios_Reactjs_React Native - Fatal编程技术网

Javascript 如何在React Native with hooks中将值发送到另一个屏幕?

Javascript 如何在React Native with hooks中将值发送到另一个屏幕?,javascript,android,ios,reactjs,react-native,Javascript,Android,Ios,Reactjs,React Native,我正在构建一个天气应用程序。在应用程序的主屏幕中,我每5秒从IP/读取API获取数据,这一切正常。我现在要做的是,当我按下链接屏幕中的按钮时,从IP/插入获取数据,然后将该值发送到主屏幕。我找到了很多关于这个的教程,但是没有任何关于react钩子的 这是我的HomeScreen.js文件: import React, {useState, useEffect} from 'react'; import {Image, Platform, ScrollView, StyleSheet, Text,

我正在构建一个天气应用程序。在应用程序的主屏幕中,我每5秒从IP/读取API获取数据,这一切正常。我现在要做的是,当我按下链接屏幕中的按钮时,从IP/插入获取数据,然后将该值发送到主屏幕。我找到了很多关于这个的教程,但是没有任何关于react钩子的

这是我的
HomeScreen.js
文件:

import React, {useState, useEffect} from 'react';
import {Image, Platform, ScrollView, StyleSheet, Text, TouchableOpacity, View, StatusBar, ActivityIndicator} from 'react-native';
import { Icon } from 'react-native-elements';
import * as Font from 'expo-font'

HomeScreen.navigationOptions = {
  header: null,
};

export default function HomeScreen() {
  const [city, setCity] = useState('--');
  const [countrycode, setCountryCode] = useState('0');
  const [icon, setIcon] = useState('ios-sunny');
  const [date, setDate] = useState('00.00');
  const [temperature, setTemperature] = useState('0');
  const [wind, setWind] = useState('0');
  const [humidity, setHumidity] = useState('0');
  const [temperatureInside, setTemperatureInside] = useState('0');
  const [humidityInside, setHumidityInside] = useState('0');
  const [pressure, setPressure] = useState('0');
  const [spinner, setSpinner] = useState(false);
  const [fontLoaded, setFontLoaded] = useState(false); 
  useEffect(() => {
    Font.loadAsync({
      'raleway-regular': require('../assets/fonts/Raleway-Regular.ttf'),
      'raleway-light': require('../assets/fonts/Raleway-Light.ttf'),
    });
    setFontLoaded(true);
    const interval = setInterval(() => {
      fetch('http://192.168.88.253:5000/read')
    .then((response) => response.json())
    .then((responseJson) => {
      setCity(responseJson.city);
      setCountryCode(responseJson.countrycode);
      //setIcon
      if(responseJson.description === 'clear sky'){
        setIcon('ios-sunny');
      }if(responseJson.description === 'few clouds' || responseJson.description === 'scattered clouds',responseJson.description === 'broken clouds'){
        setIcon('ios-partly-sunny');
      }if(responseJson.description === 'light rain' || responseJson.description === 'shgower rain' || responseJson.description === 'shower rain'){
        setIcon('md-rainy');
      }if(responseJson.description === 'thunderstorm'){
        setIcon('md-thunderstorm');
      }if(responseJson.description === 'snow'){
        setIcon('md-snow');
      }if(responseJson.description === 'mist'){
        setIcon('md-partly-sunny');
      }
      setTemperature(responseJson.temperature);
      setWind(responseJson.wind_speed);
      setHumidity(responseJson.humidity);
      setTemperatureInside(responseJson.temperatureInside);
      setHumidityInside(responseJson.humidityInside);
      setDate(responseJson.time);
      setTemperatureInside(responseJson.temperatureInside);
      setHumidityInside(responseJson.humidityInside);
      setPressure(responseJson.pressure);
    })
    .catch((error) => {
      console.warn(error);
    }); 
    }, 5000);
    return () => clearInterval(interval);
  }, []);

  return (
    <View style={styles.container}>
      <View style={styles.upperContainer}>
        <View style={styles.oneVertical}>
          <Text style={styles.city}>{city.toUpperCase()}, </Text>
          <Text style={styles.countrycode}>{countrycode}</Text> 
        </View>
        <View style={styles.twoVertical}>
          <Icon name={icon} type='ionicon' iconStyle={styles.icon}></Icon>
          <Text style={styles.date}>{date}</Text>  
        </View>
        <View style={styles.threeVertical}>
          <View style={styles.tempView}>
            <Text style={styles.temperature}>{Math.round(temperature)}°</Text>
          </View>
          <View style={styles.otherView}>
            <View style={styles.humidityTemp}>
              <Icon iconStyle={styles.otherViewIcon} type='ionicon' name='ios-jet'></Icon>
              <Text style={{color:'#fff', fontSize:20, fontFamily: 'raleway-regular',}}> {Math.round(wind)} km/h</Text>
            </View>
            <View style={styles.humidityTemp}>
              <Icon iconStyle={styles.otherViewIcon} type='ionicon' name='ios-water'></Icon>
              <Text style={{color:'#fff', fontSize:20, fontFamily: 'raleway-regular',}}>  {humidity} %</Text>
            </View>
          </View>
        </View>
      </View>
      <View style={styles.lowerContainer}>
        <View style={styles.ChamberView}>
          <Text style={{color:'#fff', fontFamily: 'raleway-regular',}}>TEMP.</Text>
          <Icon iconStyle={{color:'#fff', fontSize:30, marginVertical:10, }} type='ionicon' name='md-thermometer'></Icon>
          <Text style={{color:'#fff', fontSize:20, fontFamily: 'raleway-regular',}}>{temperatureInside}°</Text>
        </View>
        <View style={styles.ChamberView}>
          <Text style={{color:'#fff', fontFamily: 'raleway-regular',}}>VLAGA</Text>
          <Icon iconStyle={{color:'#fff', fontSize:30, marginVertical:10, }} type='ionicon' name='ios-water'></Icon>
          <Text style={{color:'#fff', fontSize:20, fontFamily: 'raleway-regular',}}>{humidityInside} %</Text>
        </View>
        <View style={styles.ChamberView}>
          <Text style={{color:'#fff', fontFamily: 'raleway-regular',}}>TLAK</Text>
          <Icon iconStyle={{color:'#fff', fontSize:30, marginVertical:10, }} type='ionicon' name='ios-hand'></Icon>
          <Text style={{color:'#fff', fontSize:20, fontFamily: 'raleway-regular',}}>{pressure} bar</Text>
        </View>
      </View>
    </View>
  );
}

您需要使用上下文api或redux来实现这一点。

您是否尝试了
React context
导航参数必须是helpfull
import React, {useState} from 'react';
import { View, StyleSheet, Alert, ActivityIndicator } from 'react-native';
import {SearchBar, Button} from 'react-native-elements';
import MapView from 'react-native-maps';
import Spinner from 'react-native-loading-spinner-overlay';
import { NavigationEvents } from 'react-navigation';

export default function LinksScreen() {
  const [spinner, setSpinner] = useState(false);
  const [search, setSearch] = useState('');
  const handleChange = event => {
    setSearch(event);
  }
  const [latitudePress, setLatitude] = useState('46.54306');
  const [longitudePress,setLongitude] = useState('14.96917');
  function addMarkerAndRequest(e){
    setLatitude(e.nativeEvent.coordinate.latitude); 
    setLongitude(e.nativeEvent.coordinate.longitude);
    const coords = {
      latitude: e.nativeEvent.coordinate.latitude,
      longitude: e.nativeEvent.coordinate.longitude
    };
    Alert.alert(
      'Sprememba mesta',
      'Stanje v komori se bo spremenilo. Ali ste prepričani?',
      [
        {
          text: 'NE',
          onPress: () => console.log('Cancel Pressed'),
          style: 'cancel',
        },
        {
          text: 'OK', 
          onPress: () => {
            fetch(`http://192.168.88.253:5000/insert/${coords.longitude}/${coords.latitude}`);
            setSpinner(true);
            setTimeout(() => setSpinner(false), 2000);
          }
        },
      ],
      {cancelable: false},
    )
  }

  return (
    <View style={styles.container}>
      <Spinner
          visible={spinner}
          textStyle={styles.spinnerTextStyle}
      />
      <SearchBar
        containerStyle={{borderColor:'#eee', borderWidth:1}}
        placeholder="Vnesi mesto.."
        onChangeText={(e) => {setSearch(e)}}
        value={search}
        platform='android'
      />
      <MapView
        style={{width:'100%', height:'80%'}}
        initialRegion={{
        latitude: Number(latitudePress),
        longitude: Number(longitudePress),
        latitudeDelta: 0.0922,
        longitudeDelta: 0.0421,
        }}
        onPress={ (event) => addMarkerAndRequest(event) }
      >
        <MapView.Marker
            coordinate={{latitude: Number(latitudePress),
            longitude: Number(longitudePress)}}
            title={`ZŠ: ${latitudePress}, ZD: ${longitudePress}`}
         />
      </MapView>
      <Button 
        onPress={()=>Alert.alert(
          'Sprememba mesta',
          'Stanje v komori se bo spremenilo. Ali ste prepričani?',
          [
            {
              text: 'NE',
              onPress: () => console.log('Cancel Pressed'),
              style: 'cancel',
            },
            {
              text: 'OK', 
              onPress: () => {
                fetch(`http://192.168.88.253:5000/insertcity/${search}`);
                setSpinner(true);
                setTimeout(() => setSpinner(false), 2000);
                setSearch('');
              }
            },
          ],
          {cancelable: false},
        )}
        title='POTRDI'
      ></Button>
    </View>
  );
}

LinksScreen.navigationOptions = {
  title: 'Zemljevid',
};