λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ‘¨‍πŸ’» web.dev/js.ts10

DOM event.composed (shadow root λ°–μœΌλ‘œ 이벀트 μ „νŒŒμ‹œν‚€κΈ°) πŸ“Œ CustomEvent κ°€ shadow root λ°–μœΌλ‘œ μ „νŒŒλ˜μ§€ μ•ŠλŠ”λ‹€? shadow DOM κ³Ό ν•¨κ»˜ μž‘μ—…ν•˜λ‹€λ³΄λ©΄ CustomEvent 둜 μƒμ„±ν•œ μ΄λ²€νŠΈκ°€ shadow DOM boundary λ₯Ό λ²—μ–΄λ‚˜μ„œ μ „νŒŒ λ˜μ§€ μ•ŠλŠ” 이슈λ₯Ό λ§ˆμ£Όν•˜κ²Œ λ˜λŠ”λ°, μ΄λŠ” μ˜λ„λœ λ™μž‘μž…λ‹ˆλ‹€. μ˜ˆμ‹œλ‘œ μ‚΄νŽ΄λ΄…μ‹œλ‹€. λ‹€μŒκ³Ό 같은 menu μ»΄ν¬λ„ŒνŠΈκ°€ μžˆλ‹€κ³  ν•˜κ² μŠ΅λ‹ˆλ‹€. μž¬μ‚¬μš©μ„±μ„ μœ„ν•΄ 곡톡 메뉴 λ‘œμ§μ„ 담은 μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€. μ½”λ“œλŠ” λ‹¨μˆœν™”μ‹œμΌ°μ§€λ§Œ, open 속성이 true κ°€ 되면 ν•΄λ‹Ή 메뉴 μ—˜λ¦¬λ¨ΌνŠΈμ˜ overlay μ„ νƒμ‹œμ— 메뉴λ₯Ό λ‹«κΈ° μœ„ν•œ μ»€μŠ€ν…€ 이벀트λ₯Ό λ°œμƒμ‹œν‚€λŠ” ν•Έλ“€λŸ¬λ₯Ό λΆ€μ°©ν•˜λŠ” νλ¦„μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€. export default class MyMenu extends HTMLElement { // ... other logics a.. 2023. 5. 15.
TypeScript + Jest μœ λ‹› ν…ŒμŠ€νŠΈ μž‘μ„±ν•˜κΈ° 이번 ν¬μŠ€νŠΈμ—μ„œλŠ” TypeScript ν™˜κ²½μ—μ„œ Jest 둜 μœ λ‹› ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ„€μ •λ“€κ³Ό 확인을 μœ„ν•œ κ°„λ‹¨ν•œ μ˜ˆμ‹œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ‚¬μš©ν•  ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬λŠ” κ°€μž₯ λŒ€μ€‘μ μœΌλ‘œ μ‚¬μš©λ˜κ³  μžˆλŠ” Jest μž…λ‹ˆλ‹€. πŸ“Œ Jest μ„€μ • 1️⃣ νŒ¨ν‚€μ§€ μ„€μΉ˜ λ¨Όμ € ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€. npm i -D jest @jest/globals ts-jest πŸ’‘ @jest/globals λͺ…μ‹œμ μΈ import λ₯Ό μ„ ν˜Έν•˜κΈ°μ—, ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•΄μ„œ jest api μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. πŸ’‘ ts-test TS 둜된 λͺ¨λ“ˆ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  λ•Œ 컴파일 + νƒ€μž… μ²΄ν¬κΉŒμ§€ ν•¨κ»˜ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€. 2️⃣ config 파일 μΆ”κ°€ // jest.config.js /** @type {import('jest').Con.. 2022. 11. 27.
async function μ‹λ³„ν•˜κΈ° πŸ“Œ 문제 상황 사내 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ‹€κ°€ prop 으둜 전달받은 ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ— λ”°λΌμ„œ κ·Έ λ‹€μŒ ν˜ΈμΆœλ˜λŠ” μ•‘μ…˜ ν•Έλ“€λŸ¬λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•œ κ²½μš°κ°€ μƒκ²ΌμŠ΅λ‹ˆλ‹€. μ•„λž˜λŠ” 이λ₯Ό κ°„λž΅ν™”ν•œ μ˜ˆμ‹œ μ½”λ“œμž…λ‹ˆλ‹€. interface ComponentProps { onAction: () => void onClick: () => unknown } export default function Component({ onClose }: ComponentProps) { // ... const handleClick = () => { onClick ? onClick() && onAction() : onAction() } return ( try me! ) } μ—¬κΈ°μ„œ onClick 이 동기 ν•¨μˆ˜λΌλ©΄ μ•„λ¬΄λŸ° λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ°.. Promis.. 2022. 8. 8.
[JavaScript] Debounce 와 Throttle 에 λŒ€ν•΄ μ•Œμ•„λ³΄μž πŸ“Œ Debounce 와 Throttle 을 μ΄μš©ν•œ 이벀트 처리 debounce 와 throttle 은 κ³Όλ„ν•œ 이벀트 λ°œμƒμœΌλ‘œ μΈν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό λ°©μ§€ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이 λ‘˜μ€ 일정 μ‹œκ°„ 간격을 두고 이벀트λ₯Ό ν˜ΈμΆœν•œλ‹€λŠ” λ™μΌν•œ λͺ©ν‘œλ₯Ό 가지고 μžˆμ§€λ§Œ μ„œλ‘œ λ™μž‘ 방식이 λ‹€λ¦…λ‹ˆλ‹€. πŸ“Œ Debounce 의 λ™μž‘ 방식과 κ΅¬ν˜„ 1️⃣ Debounce λ™μž‘ μ˜ˆμ‹œ debounce λŠ” 이벀트λ₯Ό κ·Έλ£Ήν™”ν•˜μ—¬ ν•˜λ‚˜μ˜ 이벀트만 ν˜ΈμΆœλ˜λ„λ‘ ν•©λ‹ˆλ‹€. μœ„ μ˜ˆμ‹œμ™€ 같이 debounce λŠ” 일정 waiting time λ™μ•ˆ ν•¨μˆ˜ 호좜이 μ—†λŠ” 경우 κ°€μž₯ λ§ˆμ§€λ§‰ 이벀트λ₯Ό μ„ νƒν•©λ‹ˆλ‹€. (trailing) 이 λŒ€μ‹ μ— κ°€μž₯ 처음 호좜된 이벀트λ₯Ό μ„ νƒν•˜λŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€. (leading) 2️⃣ Debounce κ΅¬ν˜„ν•˜κΈ° function deboun.. 2022. 7. 9.
[TypeScript] enum κ³Ό union type, μ–Έμ œ μ¨μ•Όν• κΉŒ? πŸ“Œ TypeScript μ—μ„œ μ—°κ΄€λœ νƒ€μž… μ •μ˜ν•˜κΈ° TypeScript λ₯Ό μ΄μš©ν•΄μ„œ κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ μ„œλ‘œ μ—°κ΄€λœ 값을 νƒ€μž…μœΌλ‘œ μ •μ˜ν•  λ•Œ enum ν˜Ήμ€ union type 을 μ΄μš©ν•΄μ„œ μ •μ˜ν•˜κ²Œ λ©λ‹ˆλ‹€. 두가지 방법 μ€‘μ—μ„œ 어떀것이 μ΅œμ„ μΈμ§€ 항상 고민이 λ˜μ—ˆλŠ”λ° 이번 κΈ°νšŒμ— λ‘˜μ˜ 차이점에 λŒ€ν•΄μ„œ μ•Œμ•„λ‘λ©΄ 쒋을 것 κ°™μ•„μ„œ μ •λ¦¬ν•΄λ΄€μŠ΅λ‹ˆλ‹€. λ§Œμ•½ λ””λ°”μ΄μŠ€μ˜ μ’…λ₯˜μ— λŒ€ν•œ νƒ€μž…μ„ string union 으둜 μ •μ˜ν•œλ‹€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. type DeviceType = "phone" | "desktop" | "pad" | "watch" 이λ₯Ό enum 을 μ΄μš©ν•΄μ„œ νƒ€μž…μ„ μ •μ˜ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. enum DeviceType { phone = 'phone', desktop = 'desktop', tablet = 'tab.. 2022. 7. 9.
[JavaScript] Array.sort λŠ” μ•ˆμ •μ„±μ„ 보μž₯ν• κΉŒ? JavaScript 의 sort ν•¨μˆ˜λŠ” μ•ˆμ • μ •λ ¬μΌκΉŒ? πŸ“Œ μ•ˆμ • μ •λ ¬μ΄λž€? μ•ˆμ • μ •λ ¬(stable sort) 은 λ™μΌν•œ ν‚€ 값에 λŒ€ν•΄ μž…λ ₯ μˆœμ„œλ₯Ό 보μž₯ν•˜λŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. κ·Έ λ°˜λŒ€μΈ λΆˆμ•ˆμ • μ •λ ¬(unstable sort) 은 μ •λ ¬ ν›„ μž…λ ₯ μˆœμ„œλ₯Ό 보μž₯해주지 μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€ν‘œμ μΈ μ•ˆμ • μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒκ³Ό 같이 3가지가 μžˆμŠ΅λ‹ˆλ‹€. 1️⃣ 버블 μ •λ ¬ (Bubble Sort) 2️⃣ μ‚½μž… μ •λ ¬ (Insertion Sort) 3️⃣ 병합 μ •λ ¬ (Merge Sort) κ·Έ μ™Έ 퀡 μ •λ ¬ κ³Ό 선택 μ •λ ¬ 은 λΆˆμ•ˆμ • μ •λ ¬ 의 λŒ€ν‘œμ μΈ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. πŸ“Œ JavaScript 의 sort ν•¨μˆ˜ JavaScript 의 sort ν•¨μˆ˜λŠ” μ•ˆμ • μ •λ ¬μΌκΉŒ? JavaScript 의 sort ν•¨μˆ˜λŠ” κ·Έλ ‡λ‹€λ©΄ μ•ˆμ • μ •λ ¬ μΌκΉŒμš”? Ch.. 2022. 3. 9.