React 5

[React] ํŠน์ • ์‹œ๊ฐ„๋Œ€์—๋งŒ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” (feat. ๊ณตํœด์ผ, ์ฃผ๋ง ์ œ์™ธ)

๐Ÿ“‚ ๋ชฉ์ฐจ ์‹œ๊ฐ„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฒ„ํŠผํ™œ์„ฑํ™” or ๋น„ํ™œ์„ฑํ™” ์ปค์Šคํ…€ ํ›… ์˜ˆ์ œ ์ฝ”๋“œimport {useState, useEffect} from "react";export const useTimeRestrictedToggle = () => { const [isEnabled, setIsEnabled] = useState(false);useEffect(()=>{ const checkIsHoliday = (date: Date) => { const month = date.getMonth() + 1; const day = date.getDate(); // ๊ณตํœด์ผ (์‹ ์ •, ์„ค๋‚ , ์ถ”์„, ๋“ฑ) const isNewYear = month === 1 && day === ..

React 2025.04.11

[React] ์„ฑ๋Šฅ ์ตœ์ ํ™”ํ•˜๋Š” ํ›… useMemo

๋ฆฌ์•กํŠธ๋ฅผ ์“ฐ๋‹ค ๋ณด๋ฉด ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜๋‚˜ ๊ณ„์‚ฐ์ด ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ํ˜„์ƒ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ .filter() ๋‚˜ .map(), .sort()์ฒ˜๋Ÿผ ๋ฐ˜๋ณต ๊ณ„์‚ฐ์ด ๋งŽ์€ ์—ฐ์‚ฐ์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฐ˜๋ณต๋˜๋ฉด ๋ฆฌ์•กํŠธ์˜ ํผํฌ๋จผ์Šค๋ฅผ ๊ฐ‰์•„๋จน์Šต๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ โญuseMemo ์ž…๋‹ˆ๋‹ค.์‹ค๋ฌด์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” useMemo์˜ ๊ฐœ๋…๊ณผ ์˜ˆ์ œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์“ฐ์ด๋Š”์ง€ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.๐Ÿ“‚ ๋ชฉ์ฐจ useMemo๋ž€?const memoizedValue = useMemo(() => { return ๊ณ„์‚ฐ์‹;}, [์˜์กด์„ฑ])๐Ÿ’ก ํ•œ๋งˆ๋””๋กœ ๋งํ•˜๋ฉด?"์˜์กด์„ฑ ๊ฐ’์ด ๋ฐ”๋€”๋•Œ๋งŒ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜๋Š” ๊ฐ’" ์„ ๋งŒ๋“ค์–ด์„œ, ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ๋ง‰์•„์ฃผ๋Š” ํ›… ๐Ÿ” ์™œ์จ์•ผํ• ๊นŒ?๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š”๋ฐ,..

React 2025.04.09

[React] Vite + Yarn Berry ํ”„๋กœ์ ํŠธ ์„ค์ •

๐Ÿ“‚ ๋ชฉ์ฐจ yarn berry ํ™œ์„ฑํ™”1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑyarn create vite my-app --template react-ts 2. yarn berry ์ดˆ๊ธฐํ™”yarn set version berry 3. pnp ๋ฐฉ์‹ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ.yarnrc.yml ํŒŒ์ผ์—์„œ nodeLinker: pnp ๋‚ด์šฉ์„ ์ถ”๊ฐ€์ด ์„ค์ •์„ ํ†ตํ•ด node_modules ํด๋” ์—†์ด๋„ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ• ์ˆ˜ ์žˆ๋‹ค. 4. yarn install ํŒจํ‚ค์ง€ ์„ค์น˜yarn install # .yarn/cache ์„ค์ • 5. ZipFS ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ด์Šˆ & ํ•ด๊ฒฐ์ฑ…1. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ ์ธ์‹ ๋ฌธ์ œyarn dlx @yarnpkg/sdks vscode #Vs Code SDK ์„ค์น˜์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด .vscode/settings.json ..

React 2025.02.23

[react] ERROR in ./src/reportWebVitals.js ํŒจํ‚ค์ง€ ๋ˆ„๋ฝ

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„ npm run start ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์˜ ๋‚ด์šฉ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: ERROR in ./src/reportWebVitals.js  ์œ„ ์—๋Ÿฌ์˜ ์›์ธ๊ณผ ๊ทธ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.web-vitals ๋ชจ๋“ˆ ์„ค์น˜๊ฐœ๋ฐœ ์ค‘์— reportWebVitals.js ํŒŒ์ผ์—์„œ web-vitals ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” web-vitals ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.  web-vitals๋Š” ์›น์‚ฌ์ดํŠธ์˜ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ธก์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ web-vitals ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ web-vitals ํŒจํ‚ค์ง€..

React 2024.12.22

[React] SPA ์‹ฑ๊ธ€ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ž€? ๋ฌด์—‡์ผ๊นŒ.

๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ, ๋ฆฌ์•กํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋จผ์ € ์›น ์„œ๋ฒ„์™€ ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ํ†ต์‹  ๊ณผ์ •๊ณผ ์‹ฑ๊ธ€ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์˜ ๊ฐœ๋…์„ ์•Œ์•„์•ผํ•œ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต๋ฐ›๋Š” ๊ณผ์ •๊ณผ SPA๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋ฉด, ๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ• ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋‚ด์šฉ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌ ํ•˜์˜€๋‹ค.๋ฆฌ์•กํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์ดํ•ดํ•˜๊ธฐ๋ฆฌ์•กํŠธ(React)๋Š” 2013๋…„ ํŽ˜์ด์Šค๋ถ์—์„œ ๋ฐœํ‘œํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๊ฐ€์ƒ DOM(Virtual DOM)๊ณผ JSX ๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ์‹์œผ๋กœ ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง ์ง€์›ํ”„๋ก ํŠธ์—”๋“œ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ..

React 2024.09.24