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 | 31 |
Tags
- react native navigation
- expo-location
- 부트캠프항해
- react native routes
- 리액트네이티브 검색
- react
- FlatList
- 무한스크롤
- react-native
- JavaScript
- 리액트 네이티브 캐러셀
- React Native
- 리액트 네이티브
- HTML
- 자바스크립트
- 프론트엔드 개발블로그
- 네이티브 css
- 리액트 네이티브 네비게이션
- 리액트
- 리액트네이티브 라우트
- 전역상태관리
- React-qurey
- 리액트 네이티브 map
- 리액트 무한스크롤
- 플랫리스트
- 리액트쿼리 무한스크롤
- 리액트쿼리
- ui로직
- 리액트 사진크기
- 비지니스로직
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