React 7

[React] Suspense์™€ lazy๋ฅผ ํ™œ์šฉํ•œ ๋กœ๋”ฉ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” ( + React use )

React๋กœ UI๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋™์•ˆ์˜ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ํ–ˆ์—ˆ๋‹ค.const Component = () => { const [data, setData] = useState(null); useEffect(() => { fetchData().then((res) => setData(res)); }, []); if (!data) return ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘...; // ๋กœ๋”ฉ ์ƒํƒœ ์ฒ˜๋ฆฌ return {data};};์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ „๊นŒ์ง€๋Š” "๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘..."์ด๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.ํ•˜์ง€๋งŒ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด ๋ฐฉ์‹์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ Suspense๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.๐Ÿง S..

React 2025.02.20

ThemeProvider๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง

ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ณตํ†ต color๋ฅผ ์ •์˜ํ•ด ๋†“๊ณ  ์“ฐ๊ธฐ๋กœ ํ•˜์˜€๋‹ค.์šฐ๋ฆฌ ํŒ€์€ styled-components๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ThemeProvider๋ฅผ ํ†ตํ•ด ์ „์—ญ์—์„œ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‚ด์šฉ์„ ์ ‘ํ•˜๊ณ  ๋ฐ”๋กœ ์ ์šฉํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.import { StrictMode } from 'react';import { createRoot } from 'react-dom/client';import App from './App.jsx';import { ThemeProvider } from 'styled-components';import { theme } from './styles/theme.js';createRoot(document.getElementById('root')).render( ..

React 2025.02.13

React ์ƒํƒœ ๊ด€๋ฆฌ: useState๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ• ๊นŒ? useReducer๊ฐ€ ํ•„์š”ํ•œ ์ˆœ๊ฐ„

useState vs useReducer ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?  ๐ŸงReact๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋Š” ๋ณดํ†ต 'useState'๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด์„œ prop drilling ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด 'Context API'๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.์ „์—ญ ์ปจํ…์ŠคํŠธ๋ฅผ ์ ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ useState๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๊ณ ์ด ์ปจํ…์ŠคํŠธ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ์„œ ์ „์—ญ์—์„œ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.ํ•˜์ง€๋งŒ useState๋งŒ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.๋˜ํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ๊ณณ์— ๋ถ„์‚ฐ๋˜๋ฉด, ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ..

React 2025.02.11

[React] ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ผ์šฐํŒ… (Client-Side Routing)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

๐Ÿ“ Routing์ด๋ž€ ๋ญ˜๊นŒ?์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์†Œ์ฐฝ์— www.naver.com์„ ์ž…๋ ฅํ•˜๋ฉด ๋„ค์ด๋ฒ„ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.์ฆ‰ ํด๋ผ์ด์–ธํŠธ์—์„œ URL์„ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ ์„œ๋ฒ„์—์„œ ์ ์ ˆํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‘๋‹ตํ•ด ์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์›๋ž˜ ๋ผ์šฐํŒ…์€ ์„œ๋ฒ„์˜ ์˜์—ญ์ด์—ˆ๋‹ค.์™œ๋ƒํ•˜๋ฉด ์›๋ž˜ ์›น์ด๋ž€ ๊ฒƒ์€ MPA(Multi Page Application)์ด์—ˆ๊ณ ํด๋ผ์ด์–ธํŠธ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•˜๊ณ ์„œ๋ฒ„๋Š” ๊ฐ ์š”์ฒญ์— ๋งž๋Š” index.html์„ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์คฌ๋‹ค.๋”ฐ๋ผ์„œ ๊ฐ ํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š” index.html์„ ๋ผ์šฐํŒ… ํ•˜๋Š” ๊ฒƒ์€ ์„œ๋ฒ„์˜ ์—ญํ• ์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ SPA(SinglePageApplication)์˜ ๋ฐœ์ „์œผ๋กœ ์ด์ œ ๋ผ์šฐํŒ…์€ ํด๋ผ์ด์–ธํŠธ์˜ ์˜์—ญ์œผ๋กœ ๋“ค์–ด์™”๋‹ค.์›น ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๋ฉด ์ฒ˜์Œ์— ์„œ๋ฒ„๊ฐ€ ..

React 2025.02.06

[React] ์–ด๋–ค ๊ฑธ state๋กœ ๊ด€๋ฆฌํ•˜๋‚˜์š”? state๋Š” ์–ด๋””์— ๋‘ฌ์•ผ ํ• ๊นŒ์š”?

React์—๋Š” ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Hook์ด 2๊ฐœ๊ฐ€ ์žˆ๋‹ค.useState์™€ useReduce. ์˜ค๋Š˜์€ useState์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.1. ์–ด๋–ค ๊ฑธ State๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋‚˜์š”? useState๋Š” ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Hook๋‹ต๊ฒŒ,state๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค๊ฐ€ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง์„ ํ†ตํ•ด UI๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฐ๋‹ค. ์ด๋Ÿฐ ๋ฆฌ์•กํŠธ์˜ ํŠน์ง• ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ state๋ฅผ ๋งŽ์ด ์ƒ์„ฑํ•œ๋‹ค๋ฉด, ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง๋„ ๊ฐ™์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์•ฑ์ด ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ๋งŒ์„ state๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ๊ฑธ state๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ?์•„๋ž˜์˜ 3๊ฐ€์ง€๋ฅผ ์ œ์™ธํ•˜๋ฉด state๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ •์ ์ธ ๋ฐ์ดํ„ฐ์ผ ๋•Œ ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ props๋กœ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ๊ธฐ์กด์˜ state๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ผ ..

React 2025.01.24

[React] ๊ฐ€์ƒ๋”(Virtual DOM)์ด๋ž€?

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

React 2025.01.23

[ReactJS] ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์•ผ ํ•˜๋Š” ์ด์œ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ์ด๋ฏธ ๋งŽ์ด ๋“ค์—ˆ์„ ๊ฒƒ์ด๋‹ค. ์›์‹œํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ถˆ๋ณ€์„ฑ์ด ์žˆ๊ณ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ถˆ๋ณ€์„ฑ์ด ์—†๋‹ค. ์—ฌ๊ธฐ์„œ ๋ถˆ๋ณ€์„ฑ(immutability)์ด๋ž€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.์ฆ‰ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋ฆฌ๋งˆ์ธ๋“œ ํ•˜๊ธฐ ์œ„ํ•ด ์กฐ๊ธˆ ๊ธธ์ง€๋งŒ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.const number = 5; number๋Š” ์›์‹œํ˜• ๋ฐ์ดํ„ฐ 5๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. (ํŽธ์˜ ์ƒ @5001์ด๋ผ๊ณ  ํ•˜๊ฒ ๋‹ค.)์—ฌ๊ธฐ์„œ number์˜ ํ• ๋‹น ๊ฐ’์„ 6์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด @5001์— ์žˆ๋Š” 5๋Š” ์‚ญ์ œํ•˜๊ณ  6์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ @5002์— 6์„ ํ• ๋‹นํ•˜๊ณ , ๋ณ€์ˆ˜ number๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ @5002๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.@5001์˜ ๋ฉ”๋ชจ..

React 2025.01.21