일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Expo
- NotionAI
- 맥린이
- 웹개발종합반
- 챗GPT
- 달리기반
- 필수강의
- 프론트엔드
- 항해99
- TS
- 실전프로젝트
- REACT
- TDD
- ChatGPT
- 스파르타코딩클럽
- 알고리즘기초주차
- 팀워크최고
- 멍친구
- 7기
- 프로그래머스
- 알pdf #파일탐색기미리보기안될때
- 리액트
- Programmers
- ReactNative
- typeScript
- D반8조
- Ai
- 코린이
- rn
- 사전준비
- Today
- Total
FrontEnd :-)
[RN] study 2week ②Weather App 본문
[Weather App 만들기]
-
snack.expo.dev 에서도 시뮬레이터 볼 수 있음~
-
div 사용 불가~ => View
StyleSheet.create
expo-status-bar
-
——————2.4 Layout with Flexbox——————
npm start
=> press i
==> Opening on iOS
-기본적으로 모든 View는 Flex Container임. display=flex 필요 없어. 그리고 RN에서 Flex Direction의 기본값은 column임. (웹에서는 row)
-flex 부모를 만들고 자식을 내가 원하는 비율로 조정할 수 있음.
——————2.5 Style——————
expo 패키지로 위치 정보 가져오기.
const [city, setCity] = useState("Loading...")
const [location, setLocation] = useState();
const [ok, setOk] = useState(true);
const ask = async() => {
const {granted} = await Location.requestForegroundPermissionsAsync();
if(!granted){
setOk(false)
}
const {coords: {latitude, longitude}} = await Location.getCurrentPositionAsync({accuracy: 5})
const location = await Location.reverseGeocodeAsync({latitude, longitude}, {useGoogleMaps: false})
setCity(location[0].city)
}
useEffect(()=> {
ask();
})
requestForegroundPermissionsAsync
=>Asks the user to grant permissions for location while the app is in the foreground.
getCurrentPositionAsync
=>Requests for one-time delivery of the user's current location. Depending on given accuracy option it may take some time to resolve, especially when you're inside a building.
reverseGeocodeAsync
=>Reverse geocode a location to postal address. Pick<LocationGeocodedLocation, 'latitude' | 'longitude'>
——————2.6 Styles part Two——————
<StatusBar style='light' />
<ScrollView
horizontal
pagingEnabled
showsHorizontalScrollIndicator={false}
// indicatorStyle='white'
contentContainerStyle={styles.weather}>
ScrollView
horizontal
contentContainerStyle
핸드폰 규격 Dimensions
const { width: SCREEN_WIDTH } = Dimensions.get("window");
pagingEnabled //좀 더 sticky하게 페이지 넘어감
showsHorizontalScrollIndicator={false} //스크롤바 없애기
indicatorStyle='white' //only iOS
error——> sdk 47버전으로 업데이트
npm i expo@latest
——————2.7 Location——————
expo install expo-location
날씨 API
https://openweathermap.org/api
Weather API - OpenWeatherMap
Please, sign up to use our fast and easy-to-work weather APIs. As a start to use OpenWeather products, we recommend our One Call API 3.0. For more functionality, please consider our products, which are included in professional collections.
openweathermap.org
=> 강의에서는 One Call API 2.5를 이용하지만, 현재 3.0은 무료가 아니라서(아니, 엄밀히 1,000 API calls per day for free이긴 한데) 아무튼 Call 5 day / 3 hour forecast data 이용했다. 다른 절차 필요없이 무료로 이용할 수 있는 API라서.
[React Native에서 외부 API 값 숨기기]
(강의 외) => api key 노출을 막기 위해 .env 파일을 이용했다.
npm install react-native-dotenv https://github.com/goatandsheep/react-native-dotenv
.env 파일 만들어서 key값(APP_WEATHERAPI="실제키값") 넣어주고,
✅ 체크사항 => .env 파일 생성 위치, 설치 후 서버 재부팅(설명생략)
.gitignore에 .env 추가하고,
babel.config.js 파일에 플러그인 설정해주고,
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
["module:react-native-dotenv", {
"envName": "APP_ENV",
"moduleName": "@env",
"path": ".env",
"blacklist": null,
"whitelist": null,
"safe": false,
"allowUndefined": true,
}]
]
};
};
App.js에서 @env로 불러온다,
import {APP_WEATHERAPI} from "@env"
console.log(APP_WEATHERAPI)
——————2.10 Icons——————
import { Ionicons } from "@expo/vector-icons"
@expo/vector-icons directory
icons.expo.fyi
'React Native' 카테고리의 다른 글
[RN] study 3week / component 기본기 (0) | 2023.02.23 |
---|---|
[RN] study 2week ④ expo - App 배포하기 (0) | 2023.02.12 |
[RN] study 2week ③Todo App (0) | 2023.02.10 |
[RN] study 2week ①expo 설치 (0) | 2023.02.07 |
[RN] study 1week (0) | 2023.02.04 |