Closed salgilbarana closed 3 years ago
PR 해드리려고 했는데 권한이 없어서 여기다 첨부해서 올립니다.
계속 로딩중으로 뜨면서 날씨 정보가 계속 안나타나는 문제를 수정해서 코드 올립니다.
import React, { useEffect, useState } from 'react'; import { FlatList, Alert } from 'react-native'; import Geolocation from 'react-native-geolocation-service'; import Styled from 'styled-components/native'; const Container = Styled.SafeAreaView` flex: 1; background-color: #EEE; `; const WeatherContainer = Styled(FlatList)``; const LoadingView = Styled.View` flex: 1; justify-content: center; align-items: center; `; const Loading = Styled.ActivityIndicator` margin-bottom: 16px; `; const LoadingLabel = Styled.Text` font-size: 16px; `; const WeatherItemContainer = Styled.View` height: 100%; justify-content: center; align-items: center; `; const Weather = Styled.Text` margin-bottom: 16px; font-size: 24px; font-weight: bold; `; const Temperature = Styled.Text` font-size: 16px; `; interface Props {} const API_KEY = '73bd07d674cc4569f650bad6f22dc79d'; interface IWeather { temperature?: number; weather?: string; isLoading: boolean; } const WeatherView = ({ }: Props) => { const [weatherInfo, setWeatherInfo] = useState<IWeather>({ temperature: undefined, weather: undefined, isLoading: false, }); const getCurrentWeather = () => { setWeatherInfo({ isLoading: false, }); Geolocation.getCurrentPosition( position => { const { latitude, longitude } = position.coords; fetch( `https://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&appid=${API_KEY}` ) .then(response => response.json()) .then(json => { setWeatherInfo({ temperature: json.main.temp, weather: json.weather[0].main, isLoading: true, }); }) .catch(error => { setWeatherInfo({ isLoading: true, }); showError('날씨 정보를 가져오는데 실패하였습니다.'); }); }, error => { setWeatherInfo({ isLoading: true, }); showError('위치 정보를 가져오는데 실패하였습니다.'); }, {enableHighAccuracy: true, timeout: 15000, maximumAge: 10000}, ); }; const showError = (message: string): void => { setTimeout(() => { Alert.alert(message); }, 500); }; useEffect(() => { getCurrentWeather(); }, []); let data = []; const { isLoading, weather, temperature } = weatherInfo; if (weather && temperature) { data.push(weatherInfo); } return ( <Container> <WeatherContainer onRefresh={() => getCurrentWeather()} refreshing={!isLoading} data={data} keyExtractor={(item, index) => { return `Weather-${index}`; }} ListEmptyComponent={ <LoadingView> <Loading size="large" color="#1976D2" /> <LoadingLabel>Loading...</LoadingLabel> </LoadingView> } renderItem={({ item, index }) => ( <WeatherItemContainer> <Weather>{(item as IWeather).weather}</Weather> <Temperature>({(item as IWeather).temperature}°C)</Temperature> </WeatherItemContainer> )} contentContainerStyle={{ flex: 1 }} /> </Container> ); }; export default WeatherView;
안녕하세요 @salgilbarana 님
코드 공유 감사합니다. 빠른 시일내로 확인해보고, 적용해 놓도록 하겠습니다. 이렇게 친절하게 코드 공유까지 해주시고 감사합니다.
다른 독자분들께서도 이 이슈를 보고 도움이 되었으면 좋겠습니다.
다시 한번 감사드립니다 🙇
PR 해드리려고 했는데 권한이 없어서 여기다 첨부해서 올립니다.
계속 로딩중으로 뜨면서 날씨 정보가 계속 안나타나는 문제를 수정해서 코드 올립니다.