πŸ‘©πŸ»‍πŸ’» Dev/Front-End (React)

React둜 폼을 λ§Œλ“€κ³ , μž…λ ₯μ°½μ—μ„œ Enter ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ‹€μŒ ν•„λ“œλ‘œ 포컀슀λ₯Ό μ΄λ™μ‹œν‚€λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆλ‹€.그런데 ν•œκΈ€ μž…λ ₯ μ‹œ λ§ˆμ§€λ§‰ κΈ€μžκ°€ λ‹€μŒ 인풋 ν•„λ“œλ‘œ μ΄λ™ν•˜λŠ” 버그가 λ°œμƒν–ˆλ‹€.μ˜μ–΄, 숫자, νŠΉμˆ˜λ¬ΈμžλŠ” λ¬Έμ œκ°€ μ—†κ³ , ν•œκΈ€μ—μ„œλ§Œ λ‚˜νƒ€λ‚¬λ‹€. 원인: IME μ‘°ν•© μƒνƒœμ™€ onKeyDown 이벀트 νƒ€μ΄λ°μ˜ 좩돌이 λ¬Έμ œλŠ” IME(Input Method Editor, μž…λ ₯κΈ°) μ‘°ν•© 방식과 이벀트 λ°œμƒ μˆœμ„œκ°€ μΆ©λŒν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•œλ‹€. IME의 μž…λ ₯ λ°©μ‹ν•œκΈ€μ€ μ‘°ν•©ν˜• μž…λ ₯ μ–Έμ–΄λ‹€. 예λ₯Ό λ“€μ–΄ ‘사’λΌλŠ” κΈ€μžλ₯Ό μž…λ ₯ν•  λ•Œ μ‹€μ œλ‘œλŠ” λ‹€μŒκ³Ό 같은 과정을 κ±°μΉœλ‹€.• μ‚¬μš©μžκ°€ ‘γ……’ μž…λ ₯• ‘ㅏ’ μž…λ ₯ → μ‘°ν•© → ‘사’ μ™„μ„±μ΄λ•Œ 쑰합이 λλ‚˜μ§€ μ•Šμ€ μƒνƒœλŠ” λΈŒλΌμš°μ €μ—μ„œλŠ” isComposing = true 둜 νŒλ‹¨λœλ‹€..
νšŒμ‚¬ ν”„λ‘œμ νŠΈμ—μ„œ 거래λͺ…μ„Έν‘œλ₯Ό A4 κ°€λ‘œ λ°©ν–₯(landscape)으둜 μΈμ‡„ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.- ν™”λ©΄μ—λŠ” μ™Όμͺ½ μ˜μ—­λ§Œ ν‘œμ‹œ- 인쇄 μ‹œμ—λŠ” A4 ν•œ μž₯을 꽉 μ±„μ›Œ 쒌/우 λͺ¨λ‘ 좜λ ₯ (ν•˜λ‚˜λŠ” 고객용 / ν•˜λ‚˜λŠ” λ‚΄λΆ€μš©)- 인쇄 μ‹œ μ „μš© μŠ€νƒ€μΌ 적용 (폰트 크기, μ—¬λ°± λ“± μ‘°μ •)이λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ React to Print의 useReactToPrint 훅을 μ‚¬μš©ν•˜μ—¬, νŠΉμ • DOM에 λŒ€ν•΄ 인쇄 μž‘μ—…μ„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. μ΄ κΈ€μ—μ„œλŠ” React to Print 라이브러리λ₯Ό μ‚¬μš©ν•΄ νŠΉμ • μ»΄ν¬λ„ŒνŠΈλ₯Ό μΈμ‡„ν•˜κ³ , 인쇄 μ‹œμ—λ§Œ μ μš©λ˜λŠ” μŠ€νƒ€μΌμ„ μ„€μ •ν•˜μ—¬ 이 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€ κ³΅μœ ν•΄ λ΄…λ‹ˆλ‹€! μ™œ window.print()κ°€ μ•„λ‹Œ React to Print?일반적으둜 μ›Ήμ—μ„œ 인쇄 κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ window.p..
μ œλ„€λ¦­(Generic)μ΄λž€?Cλ‚˜ μžλ°” 같은 정적 μ–Έμ–΄μ—μ„œ λ‹€μ–‘ν•œ νƒ€μž… 간에 μž¬μ‚¬μš©μ„±μ„ 높이기 μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 문법이닀. νƒ€μž…μŠ€ν¬λ¦½νŠΈλ„ 정적 νƒ€μž…μ„ κ°€μ§€λ―€λ‘œ μ œλ„€λ¦­ 문법을 μ§€μ›ν•œλ‹€.μ œλ„€λ¦­μ˜ 사전적 μ˜λ―ΈλŠ” 일반적인 것(general)을 λœ»ν•˜λŠ”λ°, νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ μ œλ„€λ¦­λ„ 이와 λΉ„μŠ·ν•˜κ²Œ 'μΌλ°˜ν™”λœ 데이터' νƒ€μž…μ΄λΌ λ³Ό 수 μžˆλ‹€.μ œλ„€λ¦­: ν•¨μˆ˜, νƒ€μž…, 클래슀 λ“±μ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•  νƒ€μž…μ„ 미리 정해두지 μ•Šκ³  νƒ€μž… λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή μœ„μΉ˜λ₯Ό λΉ„μ›Œ λ‘” λ‹€μŒμ—, μ‹€μ œλ‘œ κ·Έ 값을 μ‚¬μš©ν•  λ•Œ μ™ΈλΆ€μ—μ„œ νƒ€μž… λ³€μˆ˜ μžλ¦¬μ— νƒ€μž…μ„ μ§€μ •ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 방식-> μ΄λ ‡κ²Œ ν•˜λ©΄ ν•¨μˆ˜, νƒ€μž…, 클래슀 λ“± μ—¬λŸ¬ νƒ€μž…μ— λŒ€ν•΄ ν•˜λ‚˜ν•˜λ‚˜ λ”°λ‘œ μ •μ˜ν•˜μ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— μž¬μ‚¬μš©μ„±μ΄ 크게 ν–₯μƒλœλ‹€.νƒ€μž… λ³€μˆ˜λŠ” 일반적으둜 와 같이 κΊΎμ‡ κ΄„ν˜Έ 내뢀에..
ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ—μ„œ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬λŠ” μ„œλ‘œ λ‹€λ₯Έ 역할을 μˆ˜ν–‰ν•˜λ©°, κ°œλ°œμžμ—κ²Œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯κ³Ό μ‚¬μš© λ°©μ‹μ—μ„œλ„ 차이가 μžˆλ‹€. 1. λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬μ˜ κΈ°λ³Έ κ°œλ…λΌμ΄λΈŒλŸ¬λ¦¬(Library)λΌμ΄λΈŒλŸ¬λ¦¬λŠ” νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λ„κ΅¬λ“€μ˜ μ§‘ν•©. κ°œλ°œμžλŠ” ν•„μš”ν•  λ•Œ 라이브러리λ₯Ό ν˜ΈμΆœν•˜μ—¬ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 흐름을 직접 μ œμ–΄ν•˜μ§€ μ•ŠλŠ”λ‹€. λŒ€μ‹ , κ°œλ°œμžκ°€ ν•„μš”ν•œ κΈ°λŠ₯을 μ„ νƒμ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.ν”„λ ˆμž„μ›Œν¬(Framework)ν”„λ ˆμž„μ›Œν¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λ³Έ ꡬ쑰λ₯Ό μ œκ³΅ν•˜κ³ , κ·Έ μ•ˆμ—μ„œ 개발이 이루어지도둝 ν•œλ‹€. ν”„λ ˆμž„μ›Œν¬λŠ” μ½”λ“œμ˜ 흐름을 μ œμ–΄ν•˜λ©°, κ°œλ°œμžλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μ œμ‹œν•˜λŠ” 방식에 λ§žμΆ”μ–΄ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€.ν”„λ ˆμž„μ›Œν¬λŠ” “μ œμ–΄μ˜ μ—­μ „(Inversion of Control..
CSSCascading Style SheetsHTML κΎΈλ©°μ£ΌλŠ” μ–Έμ–΄λ¬Έμ„œ ν†΅μ§Έλ‘œκ°€ μ•„λ‹Œ, HTML ν•˜λ‚˜ν•˜λ‚˜ 꾸며쀌HTML에 CSS 적용 방법 3가지인라인 (inline): HTML νƒœκ·Έ μ•ˆμ— 같이 μž‘μ„±λ‚΄λΆ€ μŠ€νƒ€μΌ μ‹œνŠΈ (internal style sheet): HTML λ¬Έμ„œ μ•ˆμ— 같이 μž‘μ„±μ™ΈλΆ€ μŠ€νƒ€μΌ μ‹œνŠΈ (external style sheet): HTML λ¬Έμ„œ 밖에 μž‘μ„±ν•˜κ³  μ—°κ²°* HTML νƒœκ·Έ ν•œμŒμ„ element라고 λΆ€λ₯Έλ‹€.  JavaScriptνŠΉμ • HTMLμš”μ†Œλ₯Ό μ„ νƒν•˜μ—¬ μ œμ–΄ν•  수 μžˆλŠ” 슀크립트 μ–Έμ–΄μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄λž€?독립적인 ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ•„λ‹Œ, (ν”„λ‘œκ·Έλž¨ λ‚΄λΆ€μ˜ ꡬ성 μš”μ†Œ 쀑 ν•˜λ‚˜λ‘œ) ν”„λ‘œκ·Έλž¨μ„ μ œμ–΄ν•˜λŠ” 슀크립트 역할을 ν•˜λŠ” μ–Έμ–΄-> λŸ°νƒ€μž„μ˜ λ°œμ „μœΌλ‘œ, 슀크립트 μ–Έμ–΄λ§Œ..
DOCTYPEDocument Type의 μ•½μž.HTML이 μ–΄λ–€ λ²„μ „μœΌλ‘œ μž‘μ„±λ˜μ—ˆλŠ”μ§€ 미리 μ„ μ–Έν•˜μ—¬ μ›ΉλΈŒλΌμš°μ €κ°€ λ‚΄μš©μ„ μ˜¬λ°”λ‘œ ν‘œμ‹œν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.이λ₯Ό μ„ μ–Έν•΄μ£Όμ§€ μ•ŠμœΌλ©΄, ν˜Έν™˜ λͺ¨λ“œ(quirks mode)둜 λ™μž‘ν•˜λ©°, 이 경우 크둜슀 λΈŒλΌμš°μ§• μ΄μŠˆκ°€ μ‹¬ν•΄μ§€κ²Œ λœλ‹€. ν‘œμ€€ λͺ¨λ“œμ™€ ν˜Έν™˜ λͺ¨λ“œW3Cκ°€ μ›Ή ν‘œμ€€μ„ λ§Œλ“€λ©΄μ„œ, λ Œλ”λ§μ„ ν•  λ•Œ ν‘œμ€€ λͺ¨λ“œ(Standards mode)와 ν˜Έν™˜ λͺ¨λ“œ(Quirks mode)둜 λ Œλ”λ§ν•  수 μžˆλŠ” μ˜΅μ…˜μ΄ 생겼닀. ν˜Έν™˜ λͺ¨λ“œλ‘œ λ Œλ”λ§μ„ ν•˜κ²Œ 되면 였래된 μ›ΉνŽ˜μ΄μ§€λ“€μ„ μ΅œμ‹  λ²„μ „μ˜ λΈŒλΌμš°μ €μ—μ„œλ„ κΉ¨μ§€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 각 λΈŒλΌμš°μ €λ§ˆλ‹€ λ‹€λ₯΄κ²Œ 보일 수 μžˆλ‹€.λ”°λΌμ„œ νŠΉλ³„ν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ DOCTYPE을 λͺ…μ‹œν•˜μ—¬ λΈŒλΌμš°μ €κ°€ ν‘œμ€€ λͺ¨λ“œλ‘œ λ Œλ”λ§ν•˜κ²Œ ν•˜λŠ” 게 μ’‹λ‹€.https://develo..
μ›Ήμ˜ 이해인터넷과 웹인터넷 (Internet): μ „ 세계 컴퓨터λ₯Ό ν•˜λ‚˜μ˜ ν†΅μ‹ λ§μœΌλ‘œ μ—°κ²°ν•œ 것. 'μš°λ¦¬λŠ” λͺ¨λ‘ μ—°κ²°λ˜μ–΄ μžˆλ‹€'λŠ” κ°œλ…μ„ 상징.μ›Ή (Web): 인터넷에 μ—°κ²°λœ 컴퓨터λ₯Ό 톡해 정보λ₯Ό κ³΅μœ ν•˜λŠ” 곡간. μ›”λ“œ μ™€μ΄λ“œ μ›Ή (World Wide Web, WWW)이라고도 뢈림.μ›Ήμ˜ μ‹œμž‘κ³Ό νŠΉμ§•1980λ…„λŒ€ μŠ€μœ„μŠ€ 유럽 μž…μž 물리 μ—°κ΅¬μ†Œμ—μ„œ νŒ€ λ²„λ„ˆμŠ€λ¦¬κ°€ 연ꡬ원듀 κ°„ λΉ λ₯Έ 정보 κ΅ν™˜μ„ μœ„ν•΄ κ³ μ•ˆ.νŠΉμ§•: 정보λ₯Ό ν•˜μ΄νΌν…μŠ€νŠΈ ν˜•μ‹μœΌλ‘œ ν‘œν˜„ν•˜κ³ , 링크λ₯Ό 톡해 λ‹€μ–‘ν•œ 정보와 λ¬Έμ„œλ₯Ό μ—°κ²°ν•΄ 제곡.μ›Ή νŽ˜μ΄μ§€μ™€ μ›Ή μ‚¬μ΄νŠΈμ›Ή νŽ˜μ΄μ§€ κ°„ 링크λ₯Ό 톡해 μ΄λ™ν•˜λŠ” 것: μ›Ή μ„œν•‘ (Web Surfing) λ˜λŠ” μ›Ή λΈŒλΌμš°μ§• (Web Browsing).μ›Ή λΈŒλΌμš°μ €μ›Ή νŽ˜μ΄μ§€λ‚˜ μ›Ή μƒμ˜ 데이터λ₯Ό μ°Ύκ³  읽을 λ•Œ μ‚¬μš©ν•˜λŠ” 도ꡬ.μ›Ήμ˜ ꡬ쑰클..
ν”„λ‘ νŠΈ κ°œλ°œμ„ ν•  λ•Œ μ•„μ΄μ½˜μ€ ν•„μˆ˜ μš”μ†Œλ‹€. 처음 html cssλ₯Ό 배웠을 λ•Œ font awesome 을 μ‚¬μš©ν•΄μ„œ, 계속 μ—¬κΈ°μ„œ μ•„μ΄μ½˜μ„ μ°Ύμ•˜μ—ˆλŠ”λ° μœ λ£Œλ„ 많고 ν•œμ •μ μ΄λΌ 아쉬움이 μžˆμ—ˆλ‹€. μ•žμœΌλ‘œλŠ” λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈ μ•„μ΄μ½˜μ€ React Iconsμ—μ„œ 찾도둝 ν•˜μž! λ‹€μ–‘ν•œ Font Awesome, Ant Design, Bootstrap, Material Design λ“± λ¦¬μ•‘νŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μœ μš©ν•œ μ•„μ΄μ½˜λ“€μ„ λͺ¨λ‘ 찾을 수 μžˆλ‹€. λ‹€μŒκ³Ό 같이 κ°„λ‹¨ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. yarn add react-icons # or npm install react-icons --save import { FaBeer } from "react-icons/fa"; function Question() { return ( Lets..
μžλ™ λ§μ€„μž„ 처리 ν…μŠ€νŠΈκ°€ λ„˜μΉ  λ•Œ, μžλ™μœΌλ‘œ λ§μ€„μž„ 처리λ₯Ό ν•΄μ€˜μ•Όν•  λ•Œκ°€ μžˆλ‹€. μ΄λ•Œ ν…μŠ€νŠΈλ₯Ό μΆ•μ•½ν•˜λŠ” κΈ°μ€€μœΌλ‘œλŠ” 크게 두 κ°€μ§€κ°€ μžˆλ‹€. κΈ€μžμˆ˜μ— 따라 μΆ•μ•½ CSS ellipsis 각각의 방법을 μ•Œμ•„λ³΄μž! κΈ€μžμˆ˜μ— 따라 μΆ•μ•½ ν…μŠ€νŠΈ κΈ€μž μˆ˜μ— 따라 쑰건뢀 λ Œλ”λ§μ„ ν•΄μ£Όλ©΄ λœλ‹€. 그리고 잘린 ν…μŠ€νŠΈμ— 마우슀λ₯Ό 올리면 (hover ν•˜λ©΄) 전체 ν…μŠ€νŠΈλ₯Ό λ³Ό 수 μžˆλ„λ‘ Tooltip으둜 λ„μ›Œμ€„ 수 μžˆλ‹€. μ•„λž˜λŠ” name이 10자λ₯Ό λ„˜μœΌλ©΄ μ•žμ—μ„œλΆ€ν„° 10자λ₯Ό 보여주고, λ’· 뢀뢄은 '...'으둜 μž˜λΌμ„œ λ³΄μ—¬μ£ΌλŠ” μ½”λ“œ μ˜ˆμ‹œμ΄λ‹€. ( 데이터가 없을 λ•Œ '-' λ₯Ό 좜λ ₯ν•˜λ„λ‘ ν•˜λŠ” 쑰건뢀 λ Œλ”λ§λ„ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.) cell: ({ row: { original } }) => { return original.name ? (..
Contextλž€? : Props Drilling의 λŒ€μ•ˆ ContextλŠ” μ»΄ν¬λ„ŒνŠΈμ—μ„œ Propsλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν•„μš”ν•œ 데이터λ₯Ό λ„˜κ²¨μ£ΌλŠ” 방식이닀. νŠΉμ • 데이터λ₯Ό μ»΄ν¬λ„ŒνŠΈ 트리 전체에 걸쳐 μ‰½κ²Œ κ³΅μœ ν•  수 있게 ν•΄μ€€λ‹€. ContextλŠ” Props Drilling 문제λ₯Ό ν•΄κ²°ν•΄ 쀄 수 μžˆλ‹€. Props Drilling : μ€‘μ²©λœ μ—¬λŸ¬ κ³„μΈ΅μ˜ μ»΄ν¬λ„ŒνŠΈμ—κ²Œ props 전달. 문제점: νŠΉμ • prop을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ»΄ν¬λ„ŒνŠΈλ“€μ—κ²Œλ„ ν•΄λ‹Ή prop을 λ‚΄λ €μ£Όμ–΄μ•Ό ν•˜λŠ” λΉ„νš¨μœ¨. 가독성 ν•˜λ½. μ»΄ν¬λ„ŒνŠΈ 결합도 μƒμŠΉμœΌλ‘œ λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ λ°œμƒ κ°€λŠ₯, μ½”λ“œμ˜ λ³΅μž‘λ„ 증가 contextλŠ” λ¦¬μ•‘νŠΈ 버전 16λΆ€ν„° μ‚¬μš© κ°€λŠ₯ν•œ λ¦¬μ•‘νŠΈ λ‚΄μž₯ API둜, μ–΄λ–€ λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈλΌλ„ λ¦¬μ•‘νŠΈλ₯Ό import ν•˜λ©΄ contextλ₯Ό λ°”λ‘œ μƒμ„±ν•˜κ³  ..
yesolz
'πŸ‘©πŸ»‍πŸ’» Dev/Front-End (React)' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘