react-native apploading fetchAPI?

时间:2018-05-03 14:02:10

标签: api react-native jsx

我正在开发一个天气应用程序,使用openweathermap API,我已经成功实现了一切,现在我想使用从expo Apploading 从API获取结果,因此当mainScreen打开时,所有数据都被提取并在屏幕上呈现,而不是等待来自API的响应,

weatherAPI.js:

    const rootUrl = 'http://api.openweathermap.org/data/2.5/weather?appid=API_KEY'
    export const fetchWeather = (lat,lon) => {
    const url = rootUrl+'&lat='+lat+"&lon="+lon+"&units=metric"
    console.log(url)

    return fetch(url)
        .then(res => res.json())
        .then(json => ({
            temp: json.main.temp,
            pressure: json.main.pressure,
            humidity: json.main.humidity,
            maxTemp: json.main.temp_max,
            minTemp: json.main.temp_min,
            weather: json.weather[0].main,
            weatherDescription: json.weather[0].description,
            name: json.name,
            country: json.sys.country,
            windSpeed: json.wind.speed,
            windDeg: json.wind.deg,
            clouds: json.clouds.all,
            sunrise: json.sys.sunrise,
            sunset: json.sys.sunset,

        }))
}

Home.js:

componentDidMount(){
 this._getData()
 }
 _getData(){
navigator.geolocation.getCurrentPosition(
            (posData) => fetchWeather(posData.coords.latitude, posData.coords.longitude)
                .then(res => this.setState({
                    temp: Math.round(res.temp),
                    weather: res.weather,
                    weatherDescription: res.weatherDescription,
                    name: res.name,
                    country: res.country,

                })),
                (error)=> alert(error),
                {timeout:10000}
        )  
}

此外,也许这是一个非常基本的问题:

我想创建一个加载图标,以重新加载数据?我对这个解决方案的方法是使用onPress调用this_getData()的touchableOpacity,但我觉得编码是错误的吗?

2 个答案:

答案 0 :(得分:0)

来自Expo的Apploading https://docs.expo.io/versions/latest/sdk/app-loading的文档,它旨在用于初始加载应用程序。 通常,对于诸如请求天气信息之类的异步请求,通常有3个状态,即进度,成功,失败。您应该确保适当地渲染所有这些状态。当提取正在进行时,您可以呈现活动指标https://facebook.github.io/react-native/docs/activityindicator.html 您可以使用手动重试/更新按钮来获取最新数据,也可以使用定时器以特定间隔获取最新数据

答案 1 :(得分:0)

请使用此绑定_getData或使用胖箭头功能。这可能会解决问题。