반응형
반응형

안녕하세요. PSYda 입니다.

Nomad Coders의 React Native로 날씨앱 만들기 과정을 통해 학습한 내용을 정리중입니다.

여기 사이트를 통해 무료 교육과 필요시 유료 교육을 들으실 수 있고, 강사님이 개발자들에 필요한 유용한 정보들을 Youtube에도 올려주시니 구독하시고 자주 들으시면 도움이 될 것 같습니다.

이번 포스팅에서 알아볼 내용은 아래와 같습니다.


  1. Layouts with flexbox in React Native
  2. Loading screen
  3. Getting the location
  4. Getting the weather

1.Layouts with flexbox in React Native

  1. React Native에서는 flex를 이용해 layout 하는 것을 추천!
  2. Default flexDirection는 컬럼!
    • 변경하고 싶으면 flexDirection:"row" 입력!

1.1 flex를 통해 layout 하기!

  1. 부모 요소에서 flex를 설정
  2. 자식 요소에서 분할할 비율을 설정
    • 만약 2개의 자식이 있을 때
    • 각각 flex:1 로 설정하면 50% 씩 분할함
    • 각각 flex:1 과 flex:2를 주면 1/3 , 2/3 영역을 분할함
  3. 예시(50% 분할)
//View Container 설정
;<View style={styles.container}>
  <View style={styles.yellowView} />
  <View style={styles.blueView} />
</View>

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  yellowView: {
    flex: 1,
    backgroundColor: "yellow",
  },
  blueView: {
    flex: 1,
    backgroundColor: "blue",
  },
})
  • 결과

  1. 예시2(1/3 , 2/3 분할)
yellowView: {
    flex:1,
    backgroundColor:"yellow"
},
blueView: {
    flex:2,
    backgroundColor:"blue"
}
  • 결과

2.Loading screen

최초 Loading 화면을 만든다.

2.1 첫번째 Loading 화면 만들기

  1. loading.js 컴포넌트 생성
import React from "react"
import { StyleSheet, Text, View } from "react-native"
export default function Loading() {
  return
  ;<View style={styles.container}>
    <Text style={styles.text}>Getting the fucking weather</Text>
  </View>
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "flex-end",
    paddingHorizontal: 30,
    paddingVertical: 100,
    backgroundColor: "#FDF6AA",
  },
  text: {
    color: "#2c2c2c",
    fontSize: 30,
  },
})
  1. App.js 에서 Loading 컴포넌트 불러오기
import React from "react"
import Loading from "./Loading"
export default function App() {
  return <Loading />
}
  1. 결과

3.Getting the location

만약 App에 위치 정보를 사용하고 싶을 때 react nativeexpo에서 제공하는 API를 사용 할 수 있다.
링크된 페이지를 참고하면 expo의 location이 더 많고 유용한 라이브러리를 제공하는 것을 알 수 있다(ex.Geofencing : 사용자가 특정 지역에 들어올 때 특정 함수를 호출하는 기능).
따라서 본 포스팅에서는 expo의 location을 이용하며, 사용하기 위해서는 라이브러리 설치가 필요하다.

3.1 Expo의 location library 설치

  1. 터미널에서 expo install expo-location 입력
expo install expo-location
  1. 결과

3.2 location library import

  1. location을 사용할 파일에서 import
    • App.js에 아래와 같이 입력
import * as Location from "expo-location"

3.3 location library 사용

  1. 권한정보가져오기
    • 비동기식(async await) 방법 사용
    • requestPermissionsAsync() 함수 사용
    • try ~ catch 구문을 이용해 에러 발생시 alert 발생
  2. 위치 정보 가져 오기
    • 비동기식(async await) 방법 사용
    • componentDidMount()를 이용해 컴포넌트 생성이 완료되었을 때 getLocation을 실행
    • 위치는 getCurrentPositionAsync() 함수를 이용
  3. state를 이용해 Loading완료시 Loading 컴포넌트 해제
  4. 코드
//App.js
export default class App extends React.Component {
  state = {
    isLoading: true,
  }
  getLocation = async () => {
    try {
      await Location.requestPermissionsAsync()
      const {
        coords: { latitude, longitude },
      } = await Location.getCurrentPositionAsync()
      this.setState({ isLoading: false })
    } catch (error) {
      Alert.alert("Can't find you.", "So sad")
    }
  }
  componentDidMount() {
    this.getLocation()
  }
  render() {
    const { isLoading } = this.state
    return isLoading ? <Loading /> : null
  }
}

4 Getting the weather

4.1 API KEY 생성

  1. 사용할 API : openweathermap.org
  2. 위의 사이트에서 회원가입 및 로그인 하고, API key를 생성한다.
  3. 생성한 API key를 복사하여 app.js에 API_KEY 변수로 저장한다.
    • 코드
//App.js
const API_KEY = "478d7b0a018~~~~"

4.2 axios를 이용한 데이터 가져오기

  1. axios 설치 및 import
    • yarn add axios를 이용해 axios 설치
yarn add axios
- **import axios from "axios"**;
  1. axios.get을 이용해 weather 정보 얻기
    • 인자로 latitude, longitude, API_KEY를 전달
    • 코드
//App.js의 App Component
getWeather = async (latitude, longitude) => {
  const { data } = await axios.get(
    `http://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&APPID=${API_KEY}`
  )
  console.log(data)
}

4.3 최종 App.js

import React from "react"
import { Alert } from "react-native"
import Loading from "./Loading"
import * as Location from "expo-location"
import axios from "axios"
const API_KEY = "478d7b0a01822840e15f70ddfa48c723"

export default class App extends React.Component {
  state = {
    isLoading: true,
  }
  getWeather = async (latitude, longitude) => {
    const { data } = await axios.get(
      `http://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&APPID=${API_KEY}`
    )
    console.log(data)
  }

  getLocation = async () => {
    try {
      await Location.requestPermissionsAsync()
      const {
        coords: { latitude, longitude },
      } = await Location.getCurrentPositionAsync()
      this.getWeather(latitude, longitude)
      this.setState({ isLoading: false })
    } catch (error) {
      Alert.alert("Can't find you.", "So sad")
    }
  }
  componentDidMount() {
    this.getLocation()
  }
  render() {
    const { isLoading } = this.state
    return isLoading ? <Loading /> : null
  }
}

이번 포스팅은 여기서 마치겠습니다.

감사합니다.

반응형

'Mobile Dev > React Native' 카테고리의 다른 글

[ReactNative]0.개요  (0) 2021.03.15
반응형

안녕하세요. PSYda 입니다.

Nomad Coders의 React Native로 날씨앱 만들기 과정을 통해 학습한 내용을 정리중입니다.

여기 사이트를 통해 무료 교육과 필요시 유료 교육을 들으실 수 있고, 강사님이 개발자들에 필요한 유용한 정보들을 Youtube에도 올려주시니 구독하시고 자주 들으시면 도움이 될 것 같습니다.

이번 포스팅에서 알아볼 내용은 아래와 같습니다.


  1. React Native Requirements
  2. Expo vs RN CLI
  3. Create the project
  4. Getting to know Expo
  5. How does React Native Work?

1.Requirements

  1. node.js(v 10.0 이상)

  2. npm(v 6.0 이상)

  3. Simulator

    • PC와 휴대폰에서 simulation(test) 가 가능함
    • PC용 : Xcode(ios, Mac only), android studio(android)
    • 휴대폰용 : expo(android) or expo client(ios) 를 휴대폰에 설치
  4. expo-cli 설치

npm install -g expo-cli

2.Expo vs RN CLI

React Native 공식 홈페이지를 참고하면, 두 가지 방법(Expo CLI와 React Native CLI)으로 React Native를 시작할 수 있습니다.

2.1 Expo CLI

  1. ios/android에서 실행 가능하도록 기본 Setting된 상태로 Project를 생성해주는 도구
  2. native files을 제어하지 못함
    • expo에서 native files을 대신 관리
  3. 효과적인 Test환경
    • 휴대폰에서 Simulation 및 Test 가능함
    • ios / andorid 앱을 Build 해줌
  4. Expo에 의존적
    • expo에서 제공하는 기능들만 사용 가능함
  5. 방대한 라이브러리
    • React Native에서 제공하는 라이브러리 보다 더 많은 라이브러리 제공

2.2 React Native CLI

  1. React Native를 수동으로 작업하고 싶을 때 사용하는 도구(CLI)
  2. native files을 더 많이 컨트롤 하고 싶을 때 사용
  3. native 개발과 병행하여 개발 가능함
  4. Setting 과정이 복잡함
  5. 빌드환경 필요함
    • ios를 빌드하기 위해서는 Mac 이 필요함

3.Create the Project(using Expo)

3.1 React Native App Project 만들기

  1. 터미널에서 expo init [프로젝트명] 입력
expo init fokin-weather
  1. 프로젝트 템플릿 선택 - blank, blank(TypeScript), tabs 중에 선택

  2. 프로젝트 이름 설정 - "name" 항목에 Project 이름 입력 후 엔터

  3. yarn 사용 여부 설정(y or n)

  4. 프로젝트 실행 - 프로젝트 폴더로 이동 - yarn start 입력 - expo 브라우저 확인

3.2 Project 구성

  1. package.json
  2. babel.config.js
  3. app.json
    • Expo가 읽게 될 application 설정 파일
  4. App.js
    • React Component

3.3 휴대폰에서 App Test 하기

expo를 실행하는 PC와 휴대폰이 동일한 wifi를 사용해야합니다.

  1. Android

    • Android 휴대폰에서 Expo app 실행
    • 실행된 Metro Bundler의 좌측 QR코드를 Expo app을 이용해 읽기
  2. ios

    • PC 터미널에서 expo login 실행하여 E-mail + pwd 입력
    • ios 휴대폰에서 Expo client 실행 및 로그인
    • Projects tab -> RECENTLY IN DEVELOPMENT 에서 프로젝트 실행

3.4 PC 에서 App Test 하기

  1. Android

    • Android studio 실행
    • 프로젝트 생성
    • AVD(Android Virtual Devices) manager 실행(핸드폰 모양 아이콘)가상 Simulation 구동
    • 가상 Simulation 생성 및 실행
    • 터미널에서 expo project 실행(yarn start)
    • Run on Android device 실행
  2. ios

    • Mac PC에서만 가능
    • 터미널에서 expo project 실행(yarn start)
    • Run on iOS simulator 실행

4. Getting to know Expo( Expo 살펴 보기 )

  1. live reloading & hot reloading 지원

    • live reloading : 코드 변경 즉시 변경분을 전체 새로고침하여 simulator에 표시
    • hot reloading : 앱의 상태를 잃지 않고 변경된 부분만 새로 고침하여 표시
  2. 개발자 모드 접속

    • 휴대폰을 흔들면 접속 가능
    • Debug JS Remotely : debug를 도와주며, 속도를 느리게함(필요한 경우에만 사용)
  3. 명령어(package.json 참고)

    • yarn android 또는 yarn ios : expo App을 Simulator에서 실행하는 명령어
    • yarn eject : expo 에서 eject 할 때 사용

5.How does React Native Work?

5.1 모바일 App을 만드는 2가지 방법

  1. native

    • ios, android 의 순수 개발 언어(swift, objective-c, java 등)으로 만드는 것
  2. App 기반 Web view를 만드는 방법

    • App안에서 작동하는 웹사이트(하이브리드 방법)
    • 껍데기는 cordova or phoneGap에 의해 만들어진 native
    • 보여주는 내용은 HTML, CSS, javascript로 동작
    • react native도 이런 방식임

5.2 react native 살펴보기

  1. bridge : react로 작성된 코드를 native와 연결시켜 주는 것
    • react native에서는 항상 bridge가 필요하며, 속도 저하가 발생 할 수 있음.
    • ex) Text , View 등
  2. View : div와 비슷한 개념으로 app의 모든 것이 view
  3. Text : 글자를 넣을 때 사용 span과 비슷한 개념
  4. StyleSheet : css와 비슷한 개념

이번 포스팅은 여기서 마치겠습니다.

감사합니다.

반응형

'Mobile Dev > React Native' 카테고리의 다른 글

[ReactNative]1.Logic  (0) 2021.03.15

+ Recent posts

반응형