Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- 리액트 사진크기
 - JavaScript
 - react
 - 리액트네이티브 라우트
 - 리액트쿼리 무한스크롤
 - 자바스크립트
 - 부트캠프항해
 - 네이티브 css
 - 전역상태관리
 - HTML
 - expo-location
 - 플랫리스트
 - FlatList
 - 리액트 무한스크롤
 - React-qurey
 - React Native
 - 리액트
 - ui로직
 - 리액트 네이티브 네비게이션
 - 리액트쿼리
 - react native routes
 - 프론트엔드 개발블로그
 - react native navigation
 - 무한스크롤
 - 리액트 네이티브
 - 리액트네이티브 검색
 - 리액트 네이티브 캐러셀
 - 리액트 네이티브 map
 - react-native
 - 비지니스로직
 
													Archives
													
											
												
												- Today
 
- Total
 
솧디의 개발로그
[React-Native] expo-location통해 hook 만들기! 본문


현재 진행하는 플젝에서 위치를 받아오는 부분이다.
이 부분을 expo-location라이브러리로 구현하였다.
하.지.만!
위치 재설정을 해야하는...로직이라... 고민하던 찰나에
재사용성을 위해 hook으로 만들 것으로 결정!!!
location 공식문서
https://docs.expo.dev/versions/latest/sdk/location/
Location
docs.expo.dev
GPS 사용 확인 여부를 물어보는 로직과
실제 위치를 가져오는 로직 이렇게 2가지의 훅을 만들어야했다.
import React, { useState, useEffect } from "react";
import styled, { css } from "styled-components/native";
import Theme from "../../Theme/Theme";
import useGpsRes from "../../utils/useGpsRes";
export default function MainGps() {
  const [gpsRes,setGpsRes]=useState({region:"Loading...",district:""})
  const gps = useGpsRes();
    useEffect(async() => {
    const {region,district} = await gps;  
    setGpsRes({...gpsRes,region:region, district:district});
    // useGpsRes();
  }, []);
  return (
    <UserGps>
      {gpsRes?.region} {gpsRes?.district}
    </UserGps>
  );
}
const UserGps = styled.Text`
  color: ${Theme.colors.SkyBlue};
  font-weight: 700;
`;
🔼 useEffect로 화면에 진입하면 바로 gps hook을 실행시키고자 하였다. 🔼
useEffect로 진입할때에도 비동기처리해주셔야함요!!!
import * as Location from "expo-location";
import React, { useState, useEffect } from "react";
const useGpsAsk = async () => {
  try {
    const { granted } = await Location.requestForegroundPermissionsAsync();
    return granted;
  } catch (error) {
    Alert.alert("위치정보를 가져올 수 없습니다.");
  }
};
export default useGpsAsk;
🔼 gps사용여부를 물어보는 로직 🔼
Location.requestForegroundPermissionsAsync()을 통해
granted값을 받아온다.
granted는 boolean값이 온다.
화면에서 활용동의를 하면 true로 반환
이때 중요한건!!! 비동기방식으로 문법을 써야한다는 것!!!
처음에..그냥했다가 그 놈의 언디파인드.....
import * as Location from "expo-location";
import { useState } from "react";
import useGpsAsk from "./useGpsAsk";
const useGpsRes = async () => {
  const granted = await useGpsAsk();
  let region = "";
  let district = "";
  if (granted) {
    const {
      coords: { latitude, longitude },
    } = await Location?.getCurrentPositionAsync({ accuracy: 5 });
    const location = await Location?.reverseGeocodeAsync(
      { latitude, longitude },
      { useGoogleMaps: false }
    );
    region = location[0].region;
    district = location[0].district;
    return {region, district};
  }
  return region, district;
};
export default useGpsRes;
🔼 장소를 리턴하는 훅! 🔼
위 에서 만든 gps여부 물어보는 훅을 임포트하여 넣어주고
granted는 true값이 되어야
로직이 실행된다.
 const resetGpsAsk = () => {
    useReGpsRes();
  };
🔼 위치 재설정 onPress 🔼
훅으로 사용하여 재설정을 누르면
실행시키도록 하였다!
그럼이만 총총
'React 리액트 > React-Native 리액트네이티브' 카테고리의 다른 글
| React-Native에서 추천 검색어 기능 구현하기! (0) | 2023.02.24 | 
|---|---|
| React-Native에서 검색기능 구현하기! (전역상태관리 없이 props로만 ) (0) | 2023.02.23 | 
| 리액트 네이티브 CSS하기 완전정복! 2탄 FlatList활용하기!(carousel) (0) | 2023.02.21 | 
| 리액트 네이티브 CSS하기 완전정복! 1탄 scrollview 활용하기! (0) | 2023.01.15 | 
| React-native로 앱개발하기- < mac에 react-native 설치하기 > (0) | 2023.01.06 | 
			  Comments