개발 곡뢀/λ°λΈŒμ½”μŠ€ TIL

[ν΄λΌμš°λ”© μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ—”μ§€λ‹ˆμ–΄λ§ TIL] 240304 - λͺ¨λ°”일 λ°˜μ‘ν˜• μ μš©ν•˜κΈ°

κ°€μš€μ΄ 2024. 3. 4. 23:36

Intro


μ˜€λŠ˜μ€ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μ€‘μ‹œν•˜κ³  μžˆλŠ” λ°˜μ‘ν˜• 웹에 λŒ€ν•΄ ν•™μŠ΅ν–ˆλ‹€.

 

 

 

였늘 ν•™μŠ΅ν•œ λ‚΄μš©


λ°˜μ‘ν˜• μ›Ή μ†Œκ°œ

λ°˜μ‘ν˜• 웹은 ν•˜λ‚˜μ˜ μ›Ή μ‚¬μ΄νŠΈλ‘œ PC, λͺ¨λ°”일, ν…ŒλΈ”λ¦Ώ λ“± κΈ°κΈ° μ’…λ₯˜μ— 따라 졜적의 μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•˜λŠ” μ›Ή λ””μžμΈ μ ‘κ·Ό 방식이닀.

 

κ³΅κ°„μ˜ ν•œκ³„ κ·Ήλ³΅ν•˜κΈ°

  • 슀크둀 ν™•μž₯ (수직, μˆ˜ν‰ 슀크둀)
  • λ§Žμ€ μ–‘μ˜ 정보λ₯Ό 보여주기 μœ„ν•œ λ°©μ•ˆλ“€ (μ•„μ½”λ””μ–Έ λ“±)

μœ„μ™€ 같이, λ””λ°”μ΄μŠ€μ— λŒ€μ‘ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ λ°©μ•ˆλ“€μ΄ μ œμ‹œλ˜κ³  μžˆλ‹€.

 

λ°˜μ‘ν˜• μ›Ή μ’…λ₯˜

  • Mostly Fluid Layout Pattern (μœ λ™ν˜• νŒ¨ν„΄: ν™”λ©΄ 크기에 따라 μ»¨ν…μΈ μ˜ λ°°μΉ˜κ°€ μžλ™μœΌλ‘œ μ‘°μ •)
  • Layout Shifter Layout Pattern (ν™”λ©΄ 크기에 따라 λ ˆμ΄μ•„μ›ƒμ„ λ³€ν™”μ‹œν‚΄)

 

λ°˜μ‘ν˜• μ›Ήμ˜ λ°œμ „λ„ ν”„λ‘ νŠΈμ—”λ“œμ˜ λ°œμ „

: λ°˜μ‘ν˜• 웹을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 기본적인 viewport, λ―Έλ””μ–΄ 쿼리 λ“± CSS 만으둜 μΆ©λΆ„νžˆ κ΅¬ν˜„ν•  수 μžˆμœΌλ‚˜ λ‹€μ–‘ν•œ ν™˜κ²½μ˜ λ””λ°”μ΄μŠ€, μ‚¬μš©μž ν™˜κ²½μ— 따라 화면을 보여주기 μœ„ν•΄ React.js λ“±μ˜ ν”„λ‘ νŠΈμ—”λ“œ κΈ°μˆ μ„ ν™œμš©ν•˜λ©΄ 더 λ‹€μ΄λ‚˜λ―Ήν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

 

 

 


λΉ„λ””μ˜€ 에디터에 λ°˜μ‘ν˜• μ μš©ν•˜κΈ°

λ””λ°”μ΄μŠ€μ™€ κΈ°μ’… μ²΄ν¬ν•˜κΈ°!

  • λ””λ°”μ΄μŠ€
import React, { useState, useLayoutEffect } from 'react';

const useDeviceType = () => {
  const [deviceType, setDeviceType] = useState('pc');

  let screenWidth = window.innerWidth;
  const updateDeviceType = () => {
    screenWidth = window.innerWidth;

    if (screenWidth <= 768) setDeviceType('mobile');
    if (screenWidth > 768 && screenWidth <= 1024) setDeviceType('tablet');
    if (screenWidth > 1024) setDeviceType('pc');
  };

  useLayoutEffect(() => {
    updateDeviceType();
    window.addEventListener('resize', updateDeviceType);

    return () => {
      window.removeEventListener('resize', updateDeviceType);
    };
  }, [deviceType]);

  return deviceType;
};

export default useDeviceType;

 

⚠️ useLayoutEffectλŠ” 많이 μ‚¬μš©ν•˜λ©΄ μ„±λŠ₯이 λ–¨μ–΄μ§€κΈ° λ•Œλ¬Έμ— ν•œ 번만 μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€.

 

  • κΈ°μ’…
import React from 'react';

const useUserAgent = () => {
  let userAgent = navigator.userAgent;
  return userAgent;
};

export default useUserAgent;

 

μ›Ή API 쀑 ν•˜λ‚˜μΈ NavigatorλŠ” ν˜„μž¬ λΈŒλΌμš°μ €μ˜ μƒνƒœμ™€ 정보λ₯Ό μ•Œλ €μ€€λ‹€.

userAgentλŠ” ν˜„μž¬ λΈŒλΌμš°μ €μ˜ 이름, 버전 및 운영 μ²΄μ œμ— λŒ€ν•œ 정보λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

 

 

 

 

 

 

마무리


슀마트폰이 λ°œλ‹¬ν•˜κ³  λŒ€λΆ€λΆ„μ˜ μ‚¬μš©μžλ“€μ΄ PC보닀 λͺ¨λ°”일 ν™˜κ²½μ—μ„œ 웹을 μ ‘μ†ν•˜λŠ” κ²½ν–₯이 λ†’μ•„μ§€λ©΄μ„œ, λ°˜μ‘ν˜•μ΄λž€ 기술이 생기고 ν”„λ‘ νŠΈμ—”λ“œ 기술이 λ°œμ „ν•˜λŠ” 계기가 된 것 κ°™λ‹€. μ΄λŸ¬ν•œ 기술이 μ•žμœΌλ‘œλ„ 더 λ°œμ „ν•  것이라 μƒκ°ν•˜κ³  ν”„λ‘ νŠΈμ—”λ“œ 직업을 κ°–λŠ” 것에 μžλΆ€μ‹¬μ΄ μƒκΈ°λŠ” 것 κ°™λ‹€.