React

ยท React
์„œ๋ก ์‚ฌ๋‚ด UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Mui๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋””์ž์ธ ์‹œ์Šคํ…œ์— ๋”ฐ๋ฅธ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋ง ์ž‘์—…์„ theme ์ž์ฒด๋ฅผ ์ปค์Šคํ…€ํ•˜์—ฌ ์‚ฌ์šฉ์ค‘์ด๋‹ค. theme์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆํ•ด์„œ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํŒจํ‚ค์ง€์—์„œ ์ •์˜ํ•ด๋‘” theme์„ ๊ฐ€์ ธ์˜ค๋ฉด ์–ด๋Š ์›Œํฌ์ŠคํŽ˜์ด์Šค ํ”„๋กœ์ ํŠธ์—์„œ๋“  ๋””์ž์ธ์ด ํ•œ๋ฒˆ์— ์ ์šฉ๋˜๊ฒŒ ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•˜๊ณ ์žˆ๋‹ค. ์ฆ‰ theme์— ๋””์ž์ธ ์ž‘์—…์„ ํ•ด๋‘๋ฉด ๋ ˆํฌ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๋„ ์Šคํƒ€์ผ๋ง์ด ์ž…ํ˜€์ง„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ”๋กœ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋‹ค.๊ทธ๋Ÿฐ๋ฐ ์ด๋ฒˆ์— Select ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ปค์Šคํ…€ํ•˜๋Š”๋ฐ ๋„˜๋‚˜ ์‚ฝ์งˆ์„ ํ•˜์˜€๋‹ค... ๋ผ๋ฒจ ์—ฌ๋ถ€์— ๋”ฐ๋ผ padding ๊ฐ„๊ฒฉ์„ ์กฐ์ •ํ•ด์•ผํ–ˆ๋Š”๋ฐ, Textfield ์ปดํฌ๋„ŒํŠธ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ง์ ‘์ ์œผ๋กœ label ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์–ด ์• ๋ฅผ ๋จน์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ๋กํ•ด๋ด„! Textf..
ยท React
ํ„ฐ๋ณด๋ ˆํฌ๋กœ ๊ตฌ์ถ•ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ turbo.json ํŒŒ์ผ์€ ์œ„์™€ ๊ฐ™๋‹ค. ์ฐฉ๊ฐํ–ˆ๋˜ ๊ฒƒturbo.json { "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }, ... }์ด๊ฑธ ๋ณด๊ณ  ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์˜ outputs์ด ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ dist์—๋„ ์ €์žฅ๋˜๊ฒ ๊ตฌ๋‚˜ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทผ๋ฐ turbo run build๋ฅผ ํ•˜๊ณ  ์•„๋ฌด๋ฆฌ ์ฐพ์•„๋ด๋„ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— dist ํด๋”๊ฐ€ ๋ณด์ด์ง€์•Š์•˜๋‹ค;;๋ฃจํŠธ์—์„œ ๋นŒ๋“œ๋ฅผ ํ•˜๊ณ ๋‚˜๋ฉด, ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ž‘์—…๋ฌผ์ธ ํŒจํ‚ค์ง€, ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋“ค์˜ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ฃจํŠธ์—๋„ ๋ฌถ์—ฌ์„œ dist ํด๋”์— ์ €์žฅ์ด ๋œ๋‹ค๊ณ  ์ฐฉ๊ฐํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.๋นŒ๋“œ Outputs ๊ฒฝ๋กœ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์€ ๊ฐ ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ dist..
ยท React
์šฐ๋ฆฌ ์„œ๋น„์Šค์˜ ์ฃผ์†Œ์ฐพ๊ธฐ ๊ธฐ๋Šฅ์€ ์ฃผ์†Œ + ์œ„/๊ฒฝ๋„ ์ •๋ณด๋„ ํ•จ๊ป˜ ๋ฐ›์•„์™€์•ผ ํ•œ๋‹ค.  ์ฃผ์†Œ์ฐพ๊ธฐ๋Š” daum์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌด๋ฃŒ ์šฐํŽธ๋ฒˆํ˜ธ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค api๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ์œ„/๊ฒฝ๋„ ์ •๋ณด๋Š” ์นด์นด์˜ค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌด๋ฃŒ ๋กœ์ปฌ API ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค.  ๋‹ค์Œ ์šฐํŽธ๋ฒˆํ˜ธ ๊ฒ€์ƒ‰ api๋Š” ์Œฉ js๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค. ์ด๋ฅผ react ํ™˜๊ฒฝ์—์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ react-daum-postcode ์˜คํ”ˆ์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜์˜€๋‹ค.   ๋ฆฌ์•กํŠธ ํŽ˜์ด์ง€์—์„œ pop up ํ˜•ํƒœ๋กœ ์šฐํŽธ๋ฒˆํ˜ธ ์ฐพ๊ธฐ api๋ฅผ ๋„์šฐ๋ ค๋ฉด ์šฐ์„  ์•„๋ž˜์˜ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.์•„๋ž˜ ๋‘ ๊ฐœ ํŒŒ์ผ ์ฝ”๋“œ๋งŒ ์žˆ์œผ๋ฉด ์šฐํŽธ๋ฒˆํ˜ธ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๋ฅผ ํŒ์—…์œผ๋กœ ๋„์šธ ์ˆ˜ ์žˆ์–ด ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ npm install๋กœ ๋”ฐ๋กœ ์„ค์น˜ํ•˜์ง„ ์•Š๊ณ  ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์— ํŒŒ์ผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.  loadPostcode.tsD..
ยท React
์„œ๋ก ์‚ฌ๋‚ด์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฉ”์ผ ๋ฐœ์†กํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๊ธฐ์œ„ํ•œ html ์ž‘์—…์„ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ a ํƒœ๊ทธ๋กœ ๋งŒ๋“  ๋ฒ„ํŠผ์ด ๋ฐ”๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์ด ์•ˆ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ค ๋•Œ๋Š” text-align ์†์„ฑ์œผ๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์ด ๋˜๊ณ , ์–ด๋–ค ๋•Œ๋Š” ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ์˜ค๋Š˜ ๊ทธ ์ด์œ ๋ฅผ ํ™•์‹คํžˆ ์•Œ์•˜๋‹ค! ์ด์Šˆ์‚ฌํ•ญ a ํƒœ๊ทธ๋กœ ๋งŒ๋“  ๋ฒ„ํŠผ์ด ๊ฐ€์šด๋ฐ ์ •๋ ฌ์ด ๋˜์ง€์•Š๋Š”๋‹ค. html ์ฝ”๋“œ ์ด๋ฉ”์ผ ์ธ์ฆํ•˜๊ธฐ style ์ฝ”๋“œํ•ด๋‹น a ํƒœ๊ทธ์˜ ๋ถ€๋ชจ๋Š” body > main > section ์ด ์ „๋ถ€์ด๊ณ , a ํƒœ๊ทธ์— ์˜ํ–ฅ์„ ๋ฏธ์น ๋งŒํ•œ ์Šคํƒ€์ผ๋ง ์†์„ฑ์€ ๋”ฐ๋กœ ์—†๋‹ค. a ํƒœ๊ทธ์— `pillButton`์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ค˜์„œ ๋ฒ„ํŠผ ๋ชจ์–‘์˜ ์Šคํƒ€์ผ๋ง์„ ์ฃผ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ฐ€์šด๋ฐ ์ •๋ ฌ์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ a ํƒœ๊ทธ์— text-align: center ๋ฅผ ์ฃผ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ!! ์œ„์—์„œ ์บก์ฒ˜ํ•œ..
ยท React
์„œ๋ก  ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋ฅผ ํ”„๋ก ํŠธ์—์„œ ๋ฆฌ์•กํŠธ๋กœ ์ œ์ž‘ํ–ˆ๋‹ค. ์‚ฌ์‹ค์ƒ ์šฐ๋ฆฌ ํ”„๋กœ๋•ํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ฅด๋ฉด ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋Š” ๋ชจ๋ฐ”์ผ ์•ฑ ๋‚ด๋ถ€์˜ ์›น๋ทฐ๋กœ ๋„์›Œ์ง€๋Š” ๋ชจ๋ฐ”์ผ์— ์ข…์†๋œ ํ™”๋ฉด์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๋ชจ๋ฐ”์ผ ์•ฑ์ด ๊ฐœ๋ฐœ๋˜๊ธฐ ์ด์ „์— ์›นํŽ˜์ด์ง€์— ์ž์ฒด์—์„œ๋„ ํ•ด๋‹น ๊ธฐ๋Šฅ๋“ค์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์›น์—์„œ์˜ ์ž„์‹œ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ์ด ์™„์„ฑ๋˜๊ณ , ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด๋†“์€ ์›นํŽ˜์ด์ง€๋ฅผ ์›น๋ทฐ๋กœ ์˜ฌ๋ฆฌ๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ชจ๋ฐ”์ผ: flutter, ์›น๋ทฐ ํŒจํ‚ค์ง€ flutter inappwebview ์›นํ”„๋ก ํŠธ: react ์ด์ œ ๋‚ด๊ฐ€ ์ œ์ž‘ํ•œ ์›นํŽ˜์ด์ง€๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. 1. ๋ชจ๋ฐ”์ผ ์›น๋ทฐ์—์„œ ๋„์›Œ์กŒ์„ ๋•Œ 2. regular ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•  ๋•Œ ๋”ฐ๋ผ์„œ ๊ธฐ์กด ๋ฆฌ์•กํŠธ ํŽ˜์ด์ง€..
ยท React
์„œ๋ก  ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ฌ๋•Œ, ์ด๋ฏธ์ง€ src ํƒœ๊ทธ๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” string ํ˜•ํƒœ๋กœ ๋ฐ”๋กœ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์ •๋ณด + ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ํ™”๋ฉด์— ๋„์šธ ์ˆ˜ ์žˆ๋‹ค. 1. ์ด๋ฆ„, ๋‚ ์งœ ๋“ฑ์ด ํฌํ•จ๋˜์–ด์žˆ๋Š” ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ api๋ฅผ ๋จผ์ € ํ˜ธ์ถœ 2. ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” api๋ฅผ ํ˜ธ์ถœ ๋‘ ๊ฐ€์ง€๋ฅผ api๋ฅผ ํ™œ์šฉํ•ด์„œ ํ™”๋ฉด์— ์ด๋ฏธ์ง€๋ฅผ ๋„์šด๋‹ค. ๋ฌธ์ œ ์ด๋ฏธ์ง€ ๋ชฉ๋ก์„ ํ™”๋ฉด์— ๋„์šธ๋•Œ string ํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋งŒ ๋„์šฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ํ™”๋ฉด์— ํ‘œ์ถœํ•ด์•ผํ•˜๋‹ˆ, ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ๋จผ์ € ์ฟผ๋ฆฌ๋กœ ๋ฐ›์•„์˜ค๊ณ , ๋ฐ›์•„์˜จ ๋ชฉ๋ก ์ •๋ณด๋กœ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ ๋‚˜์„œ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๊ฒŒ ํ–ˆ๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ ์ „์ฒด ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์šด๋ฐ›์•„..
ยท React
ํ”„๋กœ์ ํŠธ ํด๋”๊ตฌ์กฐ ๐Ÿ“ฆpublic โ”ฃ ๐Ÿ“‚policy โ”— โ”— ๐Ÿ“œservice.html ๐Ÿ“ฆsrc โ”ฃ ๐Ÿ“œApp.tsx โ”ฃ ๐Ÿ“‚assets โ”ƒ โ”ฃ ๐Ÿ“‚fonts โ”ฃ ๐Ÿ“‚components โ”ฃ ๐Ÿ“‚containers โ”— ... ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ• 1. vite.config.ts ํŒŒ์ผ์— html ๊ฒฝ๋กœ ์ง€์ • โŒ https://ko.vitejs.dev/guide/build.html#multi-page-app build: { rollupOptions: { input: { main: resolve(__dirname, 'index.html'), public: resolve(__dirname, 'public/policy/service.html'), }, }, }, 2. iframe ์—์„œ src ๋กœ ๋„์šฐ๊ธฐ https://ko.vitejs.de..
ยท React
Form์„ ์ €์žฅํ•  ๋•Œ ํ•„์š”ํ•œ input ์ƒํƒœ๊ฐ’์„ object ํƒ€์ž…์œผ๋กœ ํ•œ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐ input ๊ฐ’์ด ๋ณ€๋™๋  ๋•Œ๋งˆ๋‹ค ์ƒ์œ„ ๋ถ€๋ชจ์—์„œ handleChange ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ form ์ƒํƒœ๊ฐ’์„ ์ผ๊ด„์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์ƒ์œ„ ๋ถ€๋ชจ๋Š” ์ƒํƒœ๊ฐ’ ๊ด€๋ฆฌ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๊ณ , ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒ์œ„์—์„œ ์ƒํƒœ๊ฐ’์„ ๋ฐ›์•„ ui ๋งŒ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์„ค๊ณ„๋Š” ์œ„์˜ ์„ค๋ช…๊ณผ ๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋งž์ถ”์—ˆ๋Š”๋ฐ, ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ƒ์œ„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ export const Form = () => { const initialFormValue: Info = { name: '', location: { address: '', detailAddress: '', zipCode..
ยท React
์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰์–ด ์ž๋™์™„์„ฑ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ๊ธฐ์กด์˜ ์ฝ”๋“œ๋Š” ๊ฒ€์ƒ‰์–ด input ๊ฐ’์ด ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์— api๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค. ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด debounce๋ผ๋Š” ๊ฐœ๋…์„ ์ฝ”๋“œ์— ์ƒˆ๋กœ ์ ์šฉํ•ด๋ณด์•˜๋‹ค. debounce๊ฐ€ ์–ด๋–ค ๊ฐœ๋…์ด๋ฉฐ ์ด๊ฑธ react ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณธ๋‹ค. ๊ธฐ์กด ๊ฒ€์ƒ‰ ์ปดํฌ๋„ŒํŠธ useEffect(() => { getLazySearchList(); //api ํ˜ธ์ถœ }, [searchInputValue]); setSearchInputValue(e.target.value) } /> ์œ„ ์ฝ”๋“œ์—์„œ๋Š” useState hook์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” searchInputValue๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. ์ง€๊ธˆ ์˜ˆ์ œ ์‚ฌ์ง„์—์„œ ๋ณด๋“ฏ์ด ๊ฒ€์ƒ‰์ฐฝ์— ์œ ์ €๊ฐ€ ์•„๋ž˜ ์ฒ˜๋Ÿผ ์ž…๋ ฅํ•˜๋ฉด ใ„ฑ > ๊ทธ > ๊ธ€ >..
ยท React
์„œ๋ก ๊ธฐ๋ณธ์ ์ธ Form ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋ฆ„, ์ฃผ์†Œ, ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ๋ฅผ input์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ์ €์žฅ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด input ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ด Form ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒ์„ฑ์‹œ, ์ˆ˜์ •์‹œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ์ƒ์„ฑ์‹œ๊ธฐ๋ณธ input ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์ด ๋นˆ string์„ ๊ฐ€์ง„๋‹ค.์ €์žฅ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ input ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ชจ์•„์„œ ์ƒ์„ฑ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜์ธ onCreateInfo๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ˆ˜์ •์‹œ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ value๊ฐ’์„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๊ฐ€์ง„๋‹ค.  ์ €์žฅ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด input ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ˆ˜์ • ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” onEditInfo๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.   interface Props { data?: Data; //์ˆ˜์ •์‹œ์—๋งŒ ์กด์žฌ onCreateInfo?: (inputs: ..
hana1203
'React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)