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

πŸ‘¨‍πŸ’» web.dev/fe25

React 이벀트 μ²˜λ¦¬λ°©μ‹κ³Ό SyntheticEvent React λŠ” W3C λͺ…세에 따라 ν•©μ„± 이벀트λ₯Ό μ •μ˜ν•˜κΈ° λ•Œλ¬Έμ— λΈŒλΌμš°μ € ν˜Έν™˜μ„±μ— λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. ν•©μ„± μ΄λ²€νŠΈλŠ” Synthetic Event 객체둜 μ •μ˜λ˜λ©° λΈŒλΌμš°μ € 고유 μ΄λ²€νŠΈμ™€ μ™„μ „νžˆ λ™μΌν•˜κ²Œ λ™μž‘ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 이번 ν¬μŠ€νŠΈμ—μ„œλŠ” React 의 λ‚΄λΆ€ 이벀트 μ‹œμŠ€ν…œμ˜ λ™μž‘ 방식에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. πŸ˜€ πŸ“Œ SyntheticEvent 래퍼 객체 React 의 이벀트 ν•Έλ“€λŸ¬λŠ” 크둜슀 λΈŒλΌμš°μ§•μ˜ μΌν™˜μœΌλ‘œ λͺ¨λ“  ν”Œλž«νΌμ—μ„œ λ™μΌν•œ 이벀트 처리λ₯Ό μœ„ν•΄ κ΅¬ν˜„λœ μΈν„°νŽ˜μ΄μŠ€μΈSyntheticEvent 객체λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” stopPropagation κ³Ό preventDefault 등을 ν¬ν•¨ν•˜μ—¬ λΈŒλΌμš°μ € 고유 μ΄λ²€νŠΈμ™€ λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°€μ§€μ§€λ§Œ λͺ¨λ“  λΈŒλΌμš°μ €μ—μ„œ λ™μΌν•˜κ²Œ λ™μž‘ν•¨μ„ 보μž₯ν•©λ‹ˆλ‹€. S.. 2022. 10. 17.
File API λ₯Ό μ΄μš©ν•œ Input μ»΄ν¬λ„ŒνŠΈ λ§Œλ“€κΈ° πŸ“Œ λ“€μ–΄κ°€λ©° ν”„λ‘œμ νŠΈ 도쀑 HTML Input 을 λž˜ν•‘ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν†΅ν•΄μ„œ JavaScript 의 File 객체λ₯Ό 닀뀄볼 κΈ°νšŒκ°€ μƒκ²ΌμŠ΅λ‹ˆλ‹€. File API 에 λŒ€ν•œ λͺ¨λ“  것을 이번 ν¬μŠ€νŠΈμ—μ„œ λ‹€λ£¨μ§€λŠ” μ•Šμ§€λ§Œ, ν•„μš”ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ μ•Œμ•„λ³Έ λ‚΄μš©λ“€μ„ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. πŸ“Œ File API λž€? File API λŠ” νŒŒμΌμ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜κ³  JavaScript λ₯Ό μ΄μš©ν•΄μ„œ νŒŒμΌκ°μ²΄μ— μ ‘κ·Όν•  수 μžˆλŠ” λ‹€μ–‘ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ—…λ‘œλ“œ ν•œ 파일의 이름을 λ³€κ²½ν•˜κ³  μ‚­μ œν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€μ–΄λ³΄λ©΄μ„œ File API 의 ν™œμš© 방법에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. λ¨Όμ € νŒŒμΌμ„ λ‹€λ£¨λŠ” FileInput μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν•˜κ² μŠ΅λ‹ˆλ‹€. μ—¬λŸ¬κ°œμ˜ νŒŒμΌμ„ μ—…λ‘œλ“œ ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄ multiple 속성을 μΆ”.. 2022. 8. 13.
Next.js API Routes μ•Œμ•„λ³΄κΈ° πŸ“Œ API Routes λž€? API Routes 의 λ“±μž₯ λ°°κ²½ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜λ‹€λ³΄λ©΄ backend API κ°€ ν•„μš”ν•œ μ‹œμ μ΄ μ˜€κ²Œλ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ DB 의 데이터λ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ μ‚¬μš©μžκ°€ μš”μ²­ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ“±μ˜ μž‘μ—…μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ μ΄μ „μ—λŠ” Node.js 등을 ν™œμš©ν•œ custom server νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μΆ•ν•΄μ„œ ν•΄λ‹Ή μž‘μ—…μ„ μœ„μž„ν•˜λŠ” 방식을 μ‚¬μš©ν–ˆμ§€λ§Œ, 이 경우 Next.js 의 μ„±λŠ₯ μ΅œμ ν™” 이점을 μžƒκ²Œ λ˜λŠ” λ¬Έμ œμ™€ TypeScript 및 ES6 λ°©μ‹μ˜ λͺ¨λ“ˆ μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜λ©° 개발자 κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄μ„œ Next.js λŠ” Next 9 버전 λΆ€ν„° API Routes λΌλŠ” κΈ°λŠ₯을 μ§€μ›ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 Next.js .. 2022. 7. 26.
React μ»΄ν¬λ„ŒνŠΈ(children) νƒ€μ΄ν•‘ν•˜κΈ° πŸ“Œ 무슨 νƒ€μž…μ„ μ¨μ•Όν•˜μ§€..? πŸ€” TypeScript 와 ν•¨κ»˜ React ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•˜λ‹€λ³΄λ©΄ μ»΄ν¬λ„ŒνŠΈμ—μ„œ children 을 prop 으둜 λ°›μ•„μ„œ μ‚¬μš©ν•˜κ³  이에 λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •ν•΄μ€˜μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. export default function Component({ children }) { return ( μžμ‹ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ν•©λ‹ˆλ‹€. { children } ) } μ΄λŸ΄λ•Œλ§ˆλ‹€ 항상 고민인 뢀뢄이 children 에 μ–΄λ–€ νƒ€μž…μ„ λͺ…μ‹œν•΄μ•Ό ν•˜λŠ” 것인가? 에 λŒ€ν•œ κ²ƒμž…λ‹ˆλ‹€. 이번 ν¬μŠ€νŠΈμ—μ„œλŠ” 이 뢀뢄에 λŒ€ν•œ 고민을 ν•΄κ²°ν•˜κ³ μž! React μ»΄ν¬λ„ŒνŠΈμ˜ children 에 ν• λ‹Ή κ°€λŠ₯ν•œ νƒ€μž…λ“€μ— λŒ€ν•΄μ„œ κ°„λ‹¨ν•˜κ²Œ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. πŸ“Œ React μ—μ„œ μ œκ³΅ν•˜λŠ” μ—¬λŸ¬κ°€μ§€ children νƒ€μž…λ“€ 1️⃣ JSX... 2022. 7. 23.
React 였래된 ν΄λ‘œμ €(Stale Closure) 이슈 ν•΄κ²°ν•˜κΈ° πŸ“Œ requestAnimationFrame + React Hook νŠΈλ¦¬ν”Œ μ‚¬μ „κ³Όμ œμ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•  λ•Œ rAF(requestAnimationFrame)을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. CSS λ§ŒμœΌλ‘œλŠ” κ΅¬ν˜„μ΄ νž˜λ“€λ‹€κ³  μƒκ°λ˜μ–΄ μ‚¬μš©ν•œ API인데 React와 ν•¨κ»˜ μ‚¬μš©ν•˜λ©° λ§ˆμ£Όν–ˆλ˜ 이슈λ₯Ό μ •λ¦¬ν•˜λ €κ³  ν¬μŠ€νŒ…μ„ λ‚¨κΈ°κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. πŸ“Œ rAFλ₯Ό μ‚¬μš©ν•œ slotMachine κ΅¬ν˜„λΆ€ μœ„ μ„Ήμ…˜μ—μ„œ μ‚¬μš©μž μ§€ν‘œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 숫자 λΆ€λΆ„μ˜ 증감 속도가 천천히 κ°μ†Œν•˜λŠ” μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ rAFλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. κ΅¬ν˜„ μ½”λ“œλŠ” λŒ€λž΅ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈκ°€ μ΅œμ΄ˆμ— λ Œλ”λ§ 될 λ•Œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ useEffectλ₯Ό μ‚¬μš©ν•˜μ˜€κ³  λͺ©ν‘œ μˆ«μžμ— 도달할 λ•ŒκΉŒμ§€ μž¬κ·€μ μœΌλ‘œ μ• λ‹ˆλ©”μ΄μ…˜ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. const SlotMac.. 2022. 5. 11.
React μ œμ–΄ μ»΄ν¬λ„ŒνŠΈ vs λΉ„μ œμ–΄ μ»΄ν¬λ„ŒνŠΈ πŸ“Œ λΉ„μ œμ–΄ μ»΄ν¬λ„ŒνŠΈ (uncontrolled component) λΉ„μ œμ–΄ μ»΄ν¬λ„ŒνŠΈ μ—μ„œ 폼 λ°μ΄ν„°λŠ” DOM μžμ²΄μ— μ €μž₯λ©λ‹ˆλ‹€. λ§Œμ•½ ν•΄λ‹Ή 폼 데이터λ₯Ό μ½μ–΄μ˜€κ³  μ‹Άλ‹€λ©΄ ref λ₯Ό μ΄μš©ν•΄μ„œ 값을 PULL ν•΄μ™€μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€. import React, { useRef } from 'react' const UnControlledComponent = () => { const inputRef = useRef(null) const handleClick = () => { /** input κ°’μœΌλ‘œ νŠΉμ • λ‘œμ§μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. */ console.log(inputRef.current.value) } return ( 확인 ) } export default UnControlledComponent πŸ“Œ μ œμ–΄ μ»΄ν¬λ„ŒνŠΈ (controlle.. 2022. 4. 10.