๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

React

(5)
[React] ๋ฆฌ์•กํŠธ ์„œ์ŠคํŽœ์Šค?! (React Suspense) ์ตœ๊ทผ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ฝ์–ด๋ณด๋‹ค ๋ฆฌ์•กํŠธ ์„œ์ŠคํŽœ์Šค๋ผ๋Š” ๊ฐœ๋…์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด์ „๊นŒ์ง€ ์ง„ํ–‰ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ ๋ฐ ์•ž์œผ๋กœ ์ง„ํ–‰ํ•  ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ๐Ÿง React Suspense ๋ž€? ๋ฆฌ์•กํŠธ์˜ ์„œ๋ธŒํŽœ์Šค๋Š” 16.6 ๋ฒ„์ „์—์„œ ์‹คํ—˜์ (experimental) ๊ธฐ๋Šฅ์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ๊ณ  18๋ฒ„์ „๋ถ€ํ„ฐ ๊ณต์‹์ ์œผ๋กœ ์ •์‹ ๊ธฐ๋Šฅ์œผ๋กœ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด ์„œ์ŠคํŽœ์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ์–ด๋–ค ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์ปดํฌ๋„ŒํŠธ์˜ ๋žœ๋”๋ง์„ ์ค‘๋‹จ์‹œ์ผœ ๋™์‹œ์— ๋žœ๋”๋ง์ด ๋˜๊ฒŒ ํ•œ๋‹ค๋˜์ง€, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์˜ ๋žœ๋”๋ง์„ ์•ž ์ˆœ์„œ๋กœ ์ด๋Œ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ - ์ž์‹ ์ปดํฌ๋„ŒํŠธ1 - ์ž์‹ ์ปดํฌ๋„ŒํŠธ2) ์ฒ˜๋Ÿผ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์กด์žฌํ•  ๋•Œ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ๋ถˆ๋ถ„๋ช…ํ•œ ๋น„๋™๊ธฐ ๋™์ž‘์˜ ์ˆ˜ํ–‰ ์ข…๋ฃŒ ์‹œ์ ์œผ๋กœ ์ธ..
[React] ๋ผ์ดํ”„ ์‚ฌ์ดํด(Life Cycle ) ๐Ÿง ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด๋ž€? React๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅ์ผ€ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ view์˜ ๋ถ€๋ถ„ ๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ์ปดํฌ๋„ŒํŠธ์—๋Š” view์— ๋žœ๋”๋ง๋˜๊ธฐ ์ „ ์ค€๋น„ ๊ณผ์ •๋ถ€ํ„ฐ ์‚ฌ๋ผ์งˆ ๋•Œ๊นŒ์ง€์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ฐ€์ง„๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๋‹ค๋ฃจ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” view๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ๋ผ์ดํ”„ ์‚ฌ์ดํด์€ ํฌ๊ฒŒ ๋งˆ์šดํŠธ, ์—…๋ฐ์ดํŠธ, ์–ธ๋งˆ์šดํŠธ ์„ธ๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. 1. ๋งˆ์šดํŠธ DOM์ด ์ƒ์„ฑ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋งˆ์šดํŠธ(mount)๋ผ๊ณ  ํ•œ๋‹ค. 2. ์—…๋ฐ์ดํŠธ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•œ๋‹ค. props์˜ ๋ณ€๊ฒฝ state์˜ ๋ณ€๊ฒฝ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง this.forceUpdate๋กœ ๊ฐ•์ œ ๋ Œ๋”๋ง ํŠธ๋ฆฌ๊ฑฐ 3. ์–ธ๋งˆ์šดํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„..
[React] ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ง›๋ณด๊ธฐ ์ƒํƒœ(state)๋ž€ UI์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ์œ ์ง€ํ•ด์•ผํ•  ๊ฐ’์ด๋‹ค. ๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ(์ƒํƒœ)๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ์— ๋”ฐ๋ผ UI๊ฐ€ ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ƒํƒœ๊ฐ’์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ƒํƒœ๊ฐ’์— ๋”ฐ๋ผ ํ™”๋ฉด์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์ƒํƒœ๋Š” ๋‘๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ง€์—ญ์ƒํƒœ์™€ ์ „์—ญ์ƒํƒœ์ด๋‹ค. ์ง€์—ญ์ƒํƒœ์˜ ๊ฒฝ์šฐ useState๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ํ›…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ฆฌ์•กํŠธ๋Š” ๋‹จ๋ฐฉํ–ฅ์˜ ํŠน์„ฑ์„ ์ง€๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์—†๊ณ , props๋กœ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ „์—ญ์ƒํƒœ๋Š” ์–ด๋–ค ํ๋ฆ„์— ์–ฝ๋ฉ”์ด์ง€ ์•Š๊ณ  ์ „์—ญ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ƒํƒœ๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ป๊ฒŒ๋“  ์ƒ์œ„์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ props๋กœ ์ „๋‹ฌ..
[React] setState callBack ํ•จ์ˆ˜ SleepyWoods ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ „์ฒด ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. ์ „์ฒด ์ฑ„ํŒ…์„ ๋‹ด๋‹นํ•˜๋Š” Chat ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง€์—ญ์ƒํƒœ๋กœ ์ „์ฒด ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๋„๋ก ํ–ˆ๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. const [chatDatas, setChatDatas] = useState([]); // ์ฑ„ํŒ… ์—…๋ฐ์ดํŠธ const updateChat = (chat: chatType) => { ... chat.timestamp = calcTimeFromMs(chat.timestamp); // timestamp์„ ํฌ๋ฉงํŒ…ํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ setChatDatas([...chatDatas, chat]); }; type chatType = { type: string; timestamp: string; nickname: string | numb..
[React] Lazy initialization SleepyWoods ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ „์ฒด ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. ์ „์ฒด์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ํ˜น์‹œ ๋ถ€๋“์ดํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ด ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜๋Š” ๊ฒฝ์šฐ์— ์ด์ „์— ๋‚˜๋ˆด๋˜ ์ด์•ผ๊ธฐ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์— ํœ˜๋ฐœ์„ฑ์œผ๋กœ ์ฑ„ํŒ… ๋‚ด์—ญ์„ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ๋กœ ํ•˜์˜€๊ณ , ํ˜„์žฌ ์ƒํ™ฉ์—์„œ Redis๋ฅผ ๋„์ž…ํ•˜๊ธฐ์—๋Š” ์ผ์ •์ ์œผ๋กœ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ์ฑ„ํŒ… ๋‚ด์—ญ์„ ์ดˆ๊ธฐ์— ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. const [chatDatas, setChatDatas] = useState(() => { const sessionStorageChat = sessionStorage.getItem('chat'); return sessionStorageChat ? JSON.parse..