์žฌ๋ฐŒ๊ฒŒ ํ•ฉ์‹œ๋‹ค

๊ธฐ๋กํ•˜๊ธฐ, ๊ฐ€์‹œํ™”ํ•˜๊ธฐ

์ „์ฒด ๊ธ€ 31

Custom Hook์€ ํ•จ์ˆ˜์ผ๊นŒ ์ปดํฌ๋„ŒํŠธ์ผ๊นŒ

custom hook์„ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์€๋ฐ, ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฐœ๋…์ธ์ง€ ์™€๋‹ฟ์ง€ ์•Š์•„์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ดค๋‹ค. ์ปค์Šคํ…€ ํ›…์ด๋ž€? ์ œ๋ชฉ์— ๋จผ์ € ๋‹ต์„ ํ•˜์ž๋ฉด ์ปค์Šคํ…€ ํ›…์€ ํ•จ์ˆ˜๋‹ค. ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ hook์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ, ์šฐ๋ฆฌ๋Š” ์ปค์Šคํ…€ ํ›…์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ hook์ด๋ผ ํ•จ์€ ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” useState, useEffect ๋“ฑ์„ ์ผ์ปซ๋Š”๋‹ค. ์ฆ‰ Custom hook์€ ํ•จ์ˆ˜์ด๋ฉฐ, ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€์˜ ์ฐจ์ด์ ์€ ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ hook์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ๐Ÿ’๐Ÿปโ€โ™‚๏ธ : ์•— ๊ทธ๋ ‡๋‹ค๋ฉด ์ผ๋ฐ˜ํ•จ์ˆ˜์—์„œ๋Š” hook์„ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ธ๊ฐ€์š”? โžก๏ธ ๊ทธ๋ ‡๋‹ค. ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ๋Š” hook์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, hook์„ ์‚ฌ์šฉํ•  ๋•Œ ๋‘ ๊ฐ€์ง€ ๊ทœ์น™์ด ์กด์žฌํ•œ๋‹ค. 1. React ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„ ..

React 2022.09.09

์ž‘์—… ์ค‘๊ฐ„์— ์›๊ฒฉ ์ €์žฅ์†Œ pull์„ ๋ฐ›๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•

https://meoweundi.tistory.com/20 remote์— pushํ•œ ์ปค๋ฐ‹์€ rebase ํ•˜์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค(๊ผฌ์ธ git ํ‘ผ ๊ธฐ๋ก) ๋“œ๋””์–ด ์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•๋“ค๋กœ ๊ผฌ์ธ git์„ ํ’€์–ด๋ƒˆ๋‹ค ์šฐํ•˜ํ•˜ ๋ฌธ์ œ ์ƒํ™ฉ ์ •๋ฆฌ(์ˆœ์„œ๋Œ€๋กœ) 1. local/feature/modal์„ remote์— push 2. origin/feature/modal โžก๏ธ origin/master pull request 3. ๋‹ค๋ฅธ ํŒ€์›์ด ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜.. meoweundi.tistory.com ์œ„ ๊ธ€์—์„œ ๊ฐ€์กŒ๋˜ ์˜๋ฌธ์˜ ์˜ฌ๋ฐ”๋ฅธ ํ•ด๋‹ต์„ ์ฐพ์•˜๋‹ค. ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋ฌธ์ œ ์ƒํ™ฉ ์ •์˜ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋ฅผ local/[๋ธŒ๋žœ์น˜๋ช…], ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋ฅผ remote/[๋ธŒ๋žœ์น˜๋ช…]์œผ๋กœ ์ง€์นญํ•˜๊ฒ ๋‹ค. local/feature ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ์ค‘์ด๊ณ , remote/featur..

remote์— pushํ•œ ์ปค๋ฐ‹์€ rebase ํ•˜์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค(๊ผฌ์ธ git ํ‘ผ ๊ธฐ๋ก)

๋“œ๋””์–ด ์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•๋“ค๋กœ ๊ผฌ์ธ git์„ ํ’€์–ด๋ƒˆ๋‹ค ์šฐํ•˜ํ•˜ ๋ฌธ์ œ ์ƒํ™ฉ ์ •๋ฆฌ(์ˆœ์„œ๋Œ€๋กœ) 1. local/feature/modal์„ remote์— push 2. origin/feature/modal โžก๏ธ origin/master pull request 3. ๋‹ค๋ฅธ ํŒ€์›์ด ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ํ›„ origin/master๋กœ merge pr์—์„œ ๋ฐ›์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•ด local/feature/modal ๋ธŒ๋žœ์น˜์—์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ–ˆ๋‹ค. ๊ทธ ์ „์— ๋™๋ฃŒ์˜ ์ž‘์—…์„ pull ๋ฐ›๊ธฐ ์œ„ํ•ด local/master๋กœ ์ด๋™, git pull origin master ์„ ์‹คํ–‰ํ–ˆ๋‹ค. ์ดํ›„ ๋‹ค์‹œ local/feature/modal ๋ธŒ๋žœ์น˜๋กœ ๋Œ์•„์™€, pull ๋ฐ›์€ ์ดํ›„์˜ ์ปค๋ฐ‹๋ถ€ํ„ฐ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด local/master์— ๋Œ€ํ•ด reba..

react-hook-form ๋กœ๋”ฉ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

ํผ ์ œ์ถœ ํ›„ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๋กœ๋”ฉ ํ™”๋ฉด์„ ๋„์›Œ๋ณด์ž. ๐ŸŽˆ ๊ธฐ์กด ๋ฐฉ์‹ ๋ณดํ†ต React์—์„œ ๋กœ๋”ฉ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์ผ ๊ฒƒ์ด๋‹ค. function LoginPage() { const [loading, setLoading] = useState(null); return ( {loading && } ) } submit ๋ฒ„ํŠผ ํด๋ฆญ โžก๏ธ setLoading(true) โžก๏ธ loading์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์–ด ๋ฆฌ๋ Œ๋”๋ง ๋ฐœ์ƒ, ๋กœ๋”ฉ UI๊ฐ€ ํ™”๋ฉด์— ๋„์›Œ์ง ๊ทธ๋Ÿฌ๋‚˜ react-hook-form์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. react-hook-form ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€๋ณด๋ฉด, react-hook-form์€ form ์˜์—ญ์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์˜์—ญ์˜ re-render๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ ํ˜€์žˆ๋‹ค. ์ด๋•Œ๋ฌธ์— ..

React 2022.08.22

this ํ‚ค์›Œ๋“œ

function App() { this.contents = []; } App(); App ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  this.contents๋กœ contents๋ผ๋Š” ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ ํ•˜๊ณ ์ž ํ–ˆ๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. thisํ‚ค์›Œ๋“œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์˜€๋‹ค. this ํ‚ค์›Œ๋“œ์˜ ์˜๋ฏธ this๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž์‹ ์ด ์†ํ•ด ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์นญํ•œ๋‹ค. const person = { sayHi() { console.log(this); // person ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. } } ๋”ฐ๋ผ์„œ ์ „์—ญํ•จ์ˆ˜์—์„œ์˜ this๋Š” window ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ „์—ญ scope์—์„œ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด window ๊ฐ์ฒด์— ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋งŒ strict mode์ผ ๋•Œ ์ „์—ญํ•จ์ˆ˜์—์„œ this๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด undefined๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ์œ„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ..

Vanilla JS 2022.08.19

2022.08.17 ๊ธฐ์ค€ ๋‚ด๊ฒŒ ๊ฐ€์žฅ ๋ถ€์กฑํ•œ ๊ฒƒ

๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ž์‹  ์—†๋Š” ๊ฒƒ, ๊ฐ€์žฅ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋Š๋ผ๋Š” ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์ž. ์ฒซ์งธ, Vanilla JavaScript ์‹ค๋ ฅ ๋‘˜์งธ, ํ™•์žฅ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Šฅ๋ ฅ ์…‹์งธ, ์„œ๋น„์Šค ์œ ์ง€๋ณด์ˆ˜ ๊ฒฝํ—˜ ๋‹จ๊ธฐ๊ฐ„์— ์–ด๋–ป๊ฒŒ๋“  ๋˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋“ค ์œ„์ฃผ๋กœ ํ•ด์˜จ ํƒ“์ด๋‹ค. ๋•๋ถ„์— ์•ˆ ๋˜๋Š” ๊ฑธ ๋˜๊ฒŒ ํ•˜๋Š” ๋Šฅ๋ ฅ์€ ํ‚ค์šธ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ์ด์ œ๋Š” ํ•œ๊ณ„์— ๋ถ€๋”ชํžŒ ๊ฒƒ ๊ฐ™๋‹ค. ์ •๋ง ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์ด ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜์‹ ๋‹ค. ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค์™€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ๋งค์นญ ์ด ๋‘˜์ด ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณผ์ œ๋ฅผ ๋‚ด์ฃผ๋Š” ๊ฒƒ๋งŒ ๋ด๋„ ๊ทธ ์ค‘์š”์„ฑ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” React ์œ„์ฃผ์˜ ๊ฐœ๋ฐœ์„ ํ•ด์˜จ ํ„ฐ๋ผ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋งŒ์„ ์ด์šฉํ•ด ์•ฑ์„ ๋งŒ๋“ค์–ด ๋ณธ ์ ์ด ์—†๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์ด์ œ ํ”ผํ•  ์ˆ˜ ์—†๋‹ค. ํ•ด์•ผ ํ•œ๋‹ค. 1๋ฒˆ์€ 2๋ฒˆ๊ณผ๋„ ์—ฐ๊ฒฐ๋œ..

์„ฑ์ฐฐ 2022.08.18

๋‚ด ์ฝ”๋“œ๊ฐ€ ์šฐ์•„ํ•˜์ง€ ์•Š์€ ์ด์œ 

๋ฌธ๋ฒ…์Šค ๊ฐ•์˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ง์ ‘ ๊ตฌํ˜„ ํ•ด๋ณด๋ฉฐ ๋Š๋‚€ ๋‚ด ์ฝ”๋“œ์˜ ์ „๋ฐ˜์ ์ธ ๋ฌธ์ œ์  ์š”๊ตฌ ์‚ฌํ•ญ // TODO: localStorage์— ์ €์žฅ // - [] localStroage์— ๋ฉ”๋‰ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. // - [] ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๋ฉด localStorage์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ๋ฉ”๋‰ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. // TODO: ํ’ˆ์ ˆ ํ‘œ์‹œ ๊ธฐ๋Šฅ // - [] ๋ฉ”๋‰ด์˜ ํ’ˆ์ ˆ ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ , ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ’ˆ์ ˆ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.(toggle) ๋‚ด ์ฝ”๋“œ const toggleSoldOutMenu = (e) => { const $menuElement = e.target.closest("li"); const menuId = parseInt($menuElement.dataset.menuId, 10); const $menuNam..

Vanilla JS 2022.08.17

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€

ํ•จ์ˆ˜์˜ ์šฉ๋„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค. FE ๊ฐœ๋ฐœ์— ์žˆ์–ด ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’์—๋Š” ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ UI ์š”์†Œ ์ด ์ค‘ ์˜ค๋Š˜์€ ๋‘๋ฒˆ์งธ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ฒซ๋ฒˆ์งธ ํŒจํ„ด์˜ ๊ฒฝ์šฐ ์˜์‹ํ•˜์ง€ ์•Š์•„๋„ ๊ณง์ž˜ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘๋ฒˆ์งธ ํŒจํ„ด์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ ์ˆ˜ํ•™์  ํ•จ์ˆ˜์˜ ๊ฐœ๋…๊ณผ ๋‹ค์†Œ ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ๊ณ ๋ฐฉ์‹์„ ์˜์‹์ ์œผ๋กœ ํ™•์žฅํ•˜์ง€ ์•Š์œผ๋ฉด ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ถ€๋ถ„์ด ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ํŠน์ • UI ์š”์†Œ๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  UI๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋ถ€๋ถ„์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” UI๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒƒ์ด๋‹ค. โ—๏ธ์œ ์‚ฌํ•œ ์ฝ”..

Vanilla JS 2022.08.17

ReactNative๋กœ ๋Ÿฌ๋‹์–ดํ”Œ ๋งŒ๋“ค๊ธฐ | ์‹ค์‹œ๊ฐ„ ํƒ€์ด๋จธ ๊ตฌํ˜„

2022.05.14 velog์— ์ž‘์„ฑํ–ˆ๋˜ ๊ธ€์ž…๋‹ˆ๋‹ค ๋Ÿฌ๋‹ ์–ดํ”Œ์ธ ๋งŒํผ ์ •๋ณด๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค. ์‹ค์‹œ๊ฐ„์ด๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ์ดˆ ๋‹จ์œ„๋กœ ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด ๋” ์ ํ•ฉํ•˜๊ธด ํ•˜๊ฒ ๋‹ค. ์•„๋ฌดํŠผ ๋Œ€ํ‘œ์ ์ธ ์‹ค์‹œ๊ฐ„ ์ •๋ณด๋Š” '์‚ฌ์šฉ์ž๊ฐ€ ๋‹ฌ๋ฆฐ ์‹œ๊ฐ„'์ด๋‹ค. ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฐ’๋“ค์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—(ex ํŽ˜์ด์Šค, ์นผ๋กœ๋ฆฌ) ์ด ๊ฐ’์„ ์ž˜ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค ๐Ÿ˜Š ... ๊ตฌํ˜„ ๋ชฉํ‘œ โฐ ์•„๋ž˜ ์ด๋ฏธ์ง€์˜ ํƒ€์ด๋จธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ–ˆ๋‹ค. 1์ดˆ์”ฉ ์ฆ๊ฐ€ํ•ด์•ผ ํ•˜๊ณ , ๋ฐ”๋€ ๊ฐ’์ด ํ™”๋ฉด์—๋„ ๋ฐ”๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์‹œ์ •์ง€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‹œ๊ฐ„ ์ฆ๊ฐ€๋„ ๋ฉˆ์ถฐ์•ผ ํ•œ๋‹ค. ๋Ÿฌ๋‹์„ ์žฌ๊ฐœํ•˜๋ฉด ์ผ์‹œ์ •์ง€ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ธฐ ์ „ ์‹œ๊ฐ„์—์„œ ๋‹ค์‹œ 1์ดˆ์”ฉ ์ฆ๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ๋ณธ ํƒ€์ด๋จธ ๊ตฌํ˜„ useInterval์ด๋ผ๋Š” custom Hook์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ Hoo..

ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ css ๋ฐฉ์‹ ๊ฒฐ์ •ํ•˜๊ธฐ

๐Ÿงธ ๐Ÿš‚ ๐ŸŽˆ ์ƒˆ๋กœ์šด ํ† ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  css ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ง์ ‘ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ์‹๋“ค์„ ์กฐ์‚ฌํ•˜๊ณ  ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•ด ๋ดค๋‹ค! ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ๐ŸŽˆ ๊ณ ๋ คํ•œ ์„ ํƒ์ง€ css module css preprocessor(scss) css-in-js(styled-components) ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ์ œ์ž‘ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Tailwind CSS, Bootstrap, Material UI ๋“ฑ์˜ CSS Framework๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๋‹ค. โ—๏ธ ๊ธฐ์กด css๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฌธ์ œ์  ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ ์€ ๋ฐ”๋กœ ์ค‘๋ณต๋œ ํด๋ž˜์Šค๋ช…์— ์žˆ๋‹ค. css๋Š” global scope๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, ํด๋ž˜์Šค๋ช…์ด ์ค‘๋ณต๋  ๊ฒฝ์šฐ ์›์น˜์•Š๋Š” ๊ณณ์— ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฒฐ๊ตญ ํด๋ž˜์Šค๋ช…์„ ์ ์  ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์ง€์„ ์ˆ˜ ๋ฐ–์—..