반응형
snowman95
코딩수련장
snowman95
전체 방문자
오늘
어제
  • 분류 전체보기 (229)
    • 앱테크 (3)
    • 옵시디언 (5)
    • 드라마, 영화 (1)
    • 개발자 이야기 (23)
    • 프로젝트 (10)
      • 프로젝트 방법론 (7)
      • 프로젝트 기록 (2)
      • Github (1)
    • 개발 지식 (0)
      • 디자인 패턴 (0)
    • 프론트엔드 개발 (5)
      • 테크트리 (2)
      • React.js (19)
      • ReactNative (2)
      • Next.js (6)
      • GraphQL (6)
      • 패키지 매니저 (2)
      • 라이브러리 (3)
      • 상태관리 라이브러리 (4)
      • Web 지식 (3)
      • HTML CSS (26)
      • Javascript (16)
      • 도구 (Tool) (3)
      • 성능 최적화 (1)
      • 디자인시스템 (0)
    • Python (53)
      • 모음집 (1)
      • 문법 (12)
      • 라이브러리 (15)
      • 알고리즘 (10)
      • 백준 문제풀이 (9)
      • 코딩테스트 (2)
      • 도구 (Tool) (3)
    • C++ (20)
      • 알고리즘 (6)
      • 삼성SW기출 (6)
      • 삼성 A형 (6)
    • 데이터사이언스 (1)
    • 인프라 (9)
      • 하드웨어 지식 (4)
      • Ansible (2)
      • Database (2)
      • 쉘스크립트 (1)
    • 주식 (0)
    • 취업 준비 (4)
      • 취업 이야기 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 전공요약
  • 백준
  • nextjs
  • GraphQL
  • 삼성SDS
  • 나의 해방일지
  • 기계식키보드 #nuphy
  • 티스토리챌린지
  • C++
  • 삼성SW역량테스트
  • 면접
  • 공간복잡도
  • 전공 요약 #운영체제
  • 오블완
  • 언어
  • 알고리즘
  • 전공 요약 #네트워크
  • A형
  • 전공 요약 #데이터베이스
  • Next.js #graphql #tailwind.css

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
snowman95

코딩수련장

리액트 장치 유형 감지하기
프론트엔드 개발/React.js

리액트 장치 유형 감지하기

2023. 1. 15. 19:40
728x90
반응형

react-device-detect 라이브러리를 사용하면

브라우저 유형 (크롬, 파이어폭스, 사파리, 오페라, IE, Edge)

장치 유형 (모바일, 테블릿, 스마트TV, 콘솔, 웨어러블, 임베디드, 모바일사파리, 아늗로이드, 윈도우폰, IOS) 

등의 확인이 가능하다.

 

그러나 안되는 것도 있다.

테블릿에서 파이어폭스 브라우저를 사용하면 테블릿이 아닌 Desktop로 인식한다.

그래서 어쩔 수 없이 mobile-detect 라이브러리를 섞어 쓰던가 아니면 이 라이브러리로 교체해야 한다.

 

 

일단 md.ts 파일을 만든다.

// md.ts
const MobileDetect = require('mobile-detect')

export const md = new MobileDetect(navigator.userAgent)

if(md.tablet() !== null) 이면 테블릿인 것으로 감지하면 똑바로 감지해준다.

그 외에 나머지는 react-device-detect 것을 섞어서 쓰거나 mobile-detect 만 써도 될 것 같다. 

 

그러면 이런식으로 사용된다.

import { useCallback, useEffect } from 'react'
import { isMobile, isTablet } from 'react-device-detect'
import { md } from '@src/configs/md'

const checkDeviceType = useCallback(() => {
    if (md.tablet() !== null) {
        console.log('Tablet')
    } else if (isMobile && !isTablet) {
        console.log('Mobile')
    } else {
        console.log('Desktop')
    }
    // }
}, [onSetDeviceType, onSetIsMobileView])

useEffect(() => {
    checkDeviceType()
}, [checkDeviceType])

보통 여기까지만 하면 된다.

 

 

 

만약 장치 유형과 관계없이 브라우저 창의 width가 정해놓은 범위보다 작아지게 되었을때 특정 화면을 보여주고 싶다면

먼저 브라우저 창의 크기가 resize 되는 것을 감지하고 width, height 를 반환하는 hook을 추가해준다.

// useWindowResize.ts 

import { useCallback, useLayoutEffect } from 'react'
import debounce from 'lodash/debounce'

export default function useWindowResize(
    debounceTime: number,
    onResized: (size: number[]) => void
) {
    const updateSize = useCallback(() => {
        onResized([window.innerWidth, window.innerHeight])
    }, [onResized])

    useLayoutEffect(() => {
        updateSize()
    }, [])

    useLayoutEffect(() => {
        window.addEventListener(
            'resize',
            debounce(updateSize, debounceTime),
            false
        )
        return () => window.removeEventListener('resize', updateSize)
    }, [debounceTime, updateSize])
}

그 다음에 이 hook의 onResized 함수로 등록해주면 된다.

import useWindowResize from './useWindowResize'

const checkDeviceType = (size: number[]) => {
  if (size[0] < 768) {
    ...
  } else {
    ...
  }
}

// useEffect(() => {
//     checkDeviceType()
// }, [checkDeviceType])

useWindowResize(500, checkDeviceType)
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드 개발 > React.js' 카테고리의 다른 글

리액트에서 외부 링크 관리하기  (0) 2023.01.15
리액트에서 마우스가 브라우저 창 밖에 있는지 감지하기  (0) 2023.01.15
React Query onError 가 동작하지 않는 이슈  (0) 2022.12.21
리액트 URL Hash기반의 서브페이지 관리 체계 도입  (0) 2022.09.11
리액트 이론 정리 (JSX, Component, Virtual DOM)  (0) 2022.01.10
    '프론트엔드 개발/React.js' 카테고리의 다른 글
    • 리액트에서 외부 링크 관리하기
    • 리액트에서 마우스가 브라우저 창 밖에 있는지 감지하기
    • React Query onError 가 동작하지 않는 이슈
    • 리액트 URL Hash기반의 서브페이지 관리 체계 도입
    snowman95
    snowman95
    (17~19) Unity/Unreal Engine 게임 프로그래머 (20~21) System Administrator ___________ (22~) React 웹 프론트앤드 개발자 __________ 깃헙 : https://github.com/snowman95

    티스토리툴바