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

๐Ÿ“š Study Note/React10

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ ์ตœ์ ํ™” ๋ฆฌ์•กํŠธ ๋ฆฌ๋ Œ๋”๋ง 1. props, state ๋ณ€๊ฒฝ ์‹œ ๋ฆฌ๋ Œ๋”๋ง 2. ๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋ง์‹œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋ง ๋ฆฌ์•กํŠธ์—์„œ๋Š” ์œ„์˜ ์กฐ๊ฑด์ผ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ด๊ฒƒ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. React.memo React.memo ๋Š” ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ (HOC) ๋กœ ํ•จ์ˆ˜ & ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. React.memo์„ ํ†ตํ•ด ์ตœ์ ํ™”๋ฅผ ํ•  ๊ฒฝ์šฐ ๋ Œ๋”๋ง์— ๋  ๋•Œ props๋ฅผ ์ฒดํฌํ•˜์—ฌ ์ด์ „ props์—์„œ ๋ณ€ํ™”๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ Œ๋”๋ง์„ ํ•˜๊ณ  ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค๋ฉด ๊ธฐ์กด์— ๋ Œ๋”๋ง๋œ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. React.memo๋Š” ์˜ค์ง props์˜ ๋ณ€ํ™”์—๋งŒ ์˜์กดํ•˜๋Š” ์ตœ์ ํ™” ๋ฐฉ๋ฒ•! ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— useState, useReducer, useContext๋ฅผ ํ†ตํ•ด state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. funtion A.. 2023. 2. 12.
๊ฐ€์ƒ๋” - Virtual DOM ๋ฆฌ์•กํŠธ ๊ฐ€์ƒ๋” - React Virtual DOM DOM DOM์ด๋ž€ Document Object Model์˜ ์•ฝ์ž์ด๋ฉฐ, ์›นํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๋Š” element ์š”์†Œ๋“ค์„ tree ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ element์—๋Š” DOM API๊ฐ€ ์žˆ์–ด์„œ DOM์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋•Œ ๋ฆฌํ”Œ๋กœ์šฐ ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ์š” ์ด๊ฒƒ์„ ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๊ฐ€์ƒ๋”์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Virtual DOM ๊ฐ€์ƒ๋”์€ ์‹ค์ œ DOM์˜ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ DOM์˜ ๋ณต์‚ฌ๋ณธ์œผ๋กœ์จ ๋ชจ๋“  element , ์†์„ฑ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ DOM์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (DOM API๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—) ๋ฆฌ์•กํŠธ๋Š” 2๊ฐœ.. 2023. 2. 11.
Pomodoro - TS, React, Tailwind CSS ์ด๋ฒˆ์— frontend mento ์‚ฌ์ดํŠธ์—์„œ ๊ฐ„๋‹จํ•œ ํƒ€์ด๋จธ๋ฅผ ๋งŒ๋“ค์–ด ๋ดค์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ  ์Šคํƒ typescript react tailwind css headlessui react-countdown-circle-timer ๊ตฌํ˜„ ์‚ฌํ•ญ 1. ๋ฐ˜์‘ํ˜• (๋ชจ๋ฐ”์ผ, ํƒœ๋ธ”๋ฆฟ, pc) 2. ํƒ€์ด๋จธ 3. ํ™˜๊ฒฝ ์„ค์ • ๋ชจ๋‹ฌ 4. ์‹œ๊ฐ„, ํฐํŠธ, ์ƒ‰๊น” ์„ค์ • 1. ๋ฐ˜์‘ํ˜• ๊ตฌํ˜„ tailwind css๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— tailwind css๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ƒ‰๊น”, ํฐํŠธ, ์‚ฌ์ด์ฆˆ ๋“ฑ์„ tailwind.config์— ์„ธํŒ…ํ•ด ์ค๋‹ˆ๋‹ค. 2. ํƒ€์ด๋จธ ๊ตฌํ˜„ ํƒ€์ด๋จธ ๊ตฌํ˜„์€ react-countdown-circle-timer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 3. ํ™˜๊ฒฝ ์„ค์ • ๋ชจ๋‹ฌ ๋ฐ ํ™ˆ ํ™”๋ฉด ํƒญ๋ฐ”.. 2023. 1. 2.
์™ธ๋ถ€ ํด๋ฆญ ์ด๋ฒคํŠธ - React ์‚ฌ์ด๋“œ ๋ฐ”๊ฐ€ ์—ด๋ ค์žˆ์„ ๋•Œ, ์™ธ๋ถ€ ํด๋ฆญ์„ ํ•˜๋ฉด ์‚ฌ์ด๋“œ ๋ฐ”๋ฅผ ๋‹ซ์•„์ฃผ๋Š”๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ์™ธ๋ถ€ ํด๋ฆญ ์‹œ ์ด๋ฒคํŠธ๋ฅผ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ฝ”๋“œ 2022. 10. 5.
react ์—์„œ redux ์‚ฌ์šฉํ•ด๋ณด๊ธฐ! (1) ์ด๋ฒˆ ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ redux์„ ์‚ฌ์šฉํ•  ์ผ์ด ์žˆ์–ด ๊ณต๋ถ€๋„ ํ•  ๊ฒธ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค! ์šฐ์„  redux๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•  4๊ฐ€์ง€ ๊ฐœ๋…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ฉด 1. redux ๋ณต์žกํ•œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋ฉฐ ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ค‘์•™ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ (CDN)๋ฅผ ํ†ตํ•ด ์ „์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 2. reducers ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. 3. actions actions๋Š” type, payload ๋‘ ๊ฐ€์ง€ ์†์„ฑ์„ ๊ฐ€์ง€๋ฉฐ type๋Š” ๊ณ ์œ  ์‹๋ณ„์ž payload๋Š” ๋””์ŠคํŒจ์น˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. 4. dispatch ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ actions๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. Redux ์‚ฌ์šฉ 1. react์—์„œ redux๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด.. 2022. 9. 17.
Netlify ๋ฐฐํฌ ์—๋Ÿฌ ํ•ด๊ฒฐ - React Router Dom ์ตœ๊ทผ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  Netlify๋กœ ๋ฐฐํฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ • ์ค‘์— ์žˆ๋˜ ์—๋Ÿฌ ํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ธ€๋กœ ๋‚จ๊น๋‹ˆ๋‹ค.!! Netlify๋ฅผ ์„ ํƒํ•œ ์ด์œ ๋Š” ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์ด ์‰ฝ๊ณ , ๋ฌด๋ฃŒ์ธ ์  ๊ทธ๋ฆฌ๊ณ  ๊นƒํ—ˆ๋ธŒ์— ์—ฐ๋™ํ›„ ๋ฐฐํฌ ํ•œ๊ฒฝ์šฐ push ๊ฐ€ ์žˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์žฌ ๋นŒ๋“œ๋ฅผ ํ•ด์ฃผ๋Š” ์  ๋•Œ๋ฌธ์— Netlify๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฐฐํฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐํฌ ๊ณผ์ • ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋งŽ์ด ๋‚˜์™”๊ณ  ํŠนํžˆ "build.command" failed ๋ถ€๋ถ„์—์„œ ์‹œ๊ฐ„์„ ๋งŽ์ด ๋‚ญ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ์™€ Netlify ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ 1. package.json์˜ scripts์— build์—์„œ "CI = react-scripts build" ์‹คํŒจ!, ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ ์•ˆ๋จ 2. package.json์—์„œ ๋ฐฐํฌํ•œ ์ฃผ์†Œ๋ฅผ homepage์— ์ž…๋ ฅ .. 2022. 9. 2.
Toast ui editor - Failed to parse source map ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ๋ฒ„์ „ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋‹ˆ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ƒ ํ–‰ ํ•˜๋Š” ๋ฐ๋Š” ๋ฌธ์ œ์ ์ด ์—†์ง€๋งŒ.. ๊ณ„์† ๋ณด์ด๋Š” ๊ฒŒ ๋งˆ์Œ์— ์•ˆ ๋“ค์–ด์„œ ์ˆ˜์ •ํ•ด ๋ด…๋‹ˆ๋‹ค. ์ด ๊ฐ™์€ ๋ฌธ์ œ๋Š” toast ui editor ๊นƒ ํ—™ ์ด์Šˆ์—๋„ ์˜ฌ๋ผ์™€ ์žˆ๋Š”๋ฐ์š” https://github.com/nhn/tui.editor/issues/2137 Failed to parse source map (@toast-ui/editor/dist/purify.js.map) · Issue #2137 · nhn/tui.editor Describe the bug Cant parse the source map for toast-ui/editor Compiled with warnings. Failed to parse source map fro.. 2022. 8. 30.
Toast ui editor ๋ฆฌ์•กํŠธ ๋ฒ„์ „ ์—๋Ÿฌ ์ด๋ฒˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ธ€ ์ž‘์„ฑ markdown์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ toast ui editor์ด ๋ฌธ์„œํ™”๋„ ์ž˜๋˜์–ด ์žˆ๊ณ , ์ปค์Šคํ…€์„ ํ• ์ˆ˜ ์žˆ๋Š” ์ , ๋””์ž์ธ์ด ์˜ˆ์œ ์ ์„ ๊ณ ๋ คํ•ด์„œ toast ui editor ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์น˜ํ•˜๋‹ˆ๊น ๋ฒ„์ „์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด toast-ui-editor๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฆฌ์•กํŠธ 17.0.1๊นŒ์ง€ ์ง€์›ํ•œ๋‹ค๊ณ  ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ„ฐ๋ฏธ๋„์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅ ํ•ด์ค๋‹ˆ๋‹ค. npm install react@^17.0.1 react-dom@17.0.1 ํ•˜์ง€๋งŒ ๋ฒ„์ „์„ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ ํ•˜๋ฉด ๋˜ ๋‹ค๋ฅธ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ๋ฒ„์ „ 18์—์„œ๋Š” ์œ„์™€ ๊ฐ™์ด ReactDOM์„ import ํ•˜์ง€๋งŒ ๋ฒ„์ „ 17์—์„œ๋Š” client๋ฅผ ์ œ๊ฑฐํ•ด.. 2022. 8. 30.
React Router dom v6 - React Protected Routes React Router dom์„ ์ด์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ณด์ด๋Š” ๊ฒฝ๋กœ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•  ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ! ๊ณ ๋ฏผํ•˜๋‹ค ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌ ํ•ด๋ด…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๊ณ , 1. ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€ ์œ ์ €๋Š” "/todo" ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•  ๊ฒฝ์šฐ "/" ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•œ๋‹ค.๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด utils ํด๋”์— PrivateRoutes.jsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค. Context API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๊ด€๋ฆฌํ•ด์คฌ๋Š”๋ฐ, ์ด๋•Œ ๋กœ๊ทธ์ธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, "/" ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ๋œ ๊ฒฝ์šฐ Outlet๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž์‹ ๊ฒฝ๋กœ ์š”์†Œ๋ฅผ ๋ Œ๋”๋ง ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  App ์ปดํฌ๋„ŒํŠธ์—์„œ Private ๊ฒฝ๋กœ์˜ ๋ผ์šฐํŠธ์— ์ƒ์„ฑํ•œ PrivateRoute.. 2022. 8. 24.