์๋ก ์ฌ๋ด 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..
์ฐ๋ฆฌ ์๋น์ค์ ์ฃผ์์ฐพ๊ธฐ ๊ธฐ๋ฅ์ ์ฃผ์ + ์/๊ฒฝ๋ ์ ๋ณด๋ ํจ๊ป ๋ฐ์์์ผ ํ๋ค. ์ฃผ์์ฐพ๊ธฐ๋ daum์์ ์ ๊ณตํ๋ ๋ฌด๋ฃ ์ฐํธ๋ฒํธ ๊ฒ์ ์๋น์ค api๋ฅผ ์ฌ์ฉํ๊ณ , ์/๊ฒฝ๋ ์ ๋ณด๋ ์นด์นด์ค์์ ์ ๊ณตํ๋ ๋ฌด๋ฃ ๋ก์ปฌ API ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๋ค. ๋ค์ ์ฐํธ๋ฒํธ ๊ฒ์ api๋ ์ฉ js๋ก ๊ตฌํ๋์ด์๋ค. ์ด๋ฅผ react ํ๊ฒฝ์์ ๊ตฌํํ๊ธฐ ์ํด์ react-daum-postcode ์คํ์์ค ํจํค์ง๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐํ์๋ค. ๋ฆฌ์กํธ ํ์ด์ง์์ pop up ํํ๋ก ์ฐํธ๋ฒํธ ์ฐพ๊ธฐ api๋ฅผ ๋์ฐ๋ ค๋ฉด ์ฐ์ ์๋์ ์ฝ๋๊ฐ ํ์ํ๋ค.์๋ ๋ ๊ฐ ํ์ผ ์ฝ๋๋ง ์์ผ๋ฉด ์ฐํธ๋ฒํธ ๊ฒ์ ์๋น์ค๋ฅผ ํ์
์ผ๋ก ๋์ธ ์ ์์ด ํด๋น ํจํค์ง๋ฅผ npm install๋ก ๋ฐ๋ก ์ค์นํ์ง ์๊ณ ํ๋ก์ ํธ ๋ด๋ถ์ ํ์ผ๋ก ์ถ๊ฐํด์ฃผ์๋ค. loadPostcode.tsD..
์๋ก ์ฌ๋ด์์ ์ฌ์ฉ์์๊ฒ ์ด๋ฉ์ผ ๋ฐ์กํ๋ ํ
ํ๋ฆฟ์ ๋ง๋ค๊ธฐ์ํ html ์์
์ ํ๋ค. ๊ทธ๋ฐ๋ฐ a ํ๊ทธ๋ก ๋ง๋ ๋ฒํผ์ด ๋ฐ๋ก ๊ฐ์ด๋ฐ ์ ๋ ฌ์ด ์๋๋ ๊ฒ์ด๋ค. ์ด๋ค ๋๋ text-align ์์ฑ์ผ๋ก ๊ฐ์ด๋ฐ ์ ๋ ฌ์ด ๋๊ณ , ์ด๋ค ๋๋ ์๋๋ ๊ฒฝ์ฐ๊ฐ ์์๋๋ฐ ์ค๋ ๊ทธ ์ด์ ๋ฅผ ํ์คํ ์์๋ค! ์ด์์ฌํญ a ํ๊ทธ๋ก ๋ง๋ ๋ฒํผ์ด ๊ฐ์ด๋ฐ ์ ๋ ฌ์ด ๋์ง์๋๋ค. html ์ฝ๋ ์ด๋ฉ์ผ ์ธ์ฆํ๊ธฐ style ์ฝ๋ํด๋น a ํ๊ทธ์ ๋ถ๋ชจ๋ body > main > section ์ด ์ ๋ถ์ด๊ณ , a ํ๊ทธ์ ์ํฅ์ ๋ฏธ์น ๋งํ ์คํ์ผ๋ง ์์ฑ์ ๋ฐ๋ก ์๋ค. a ํ๊ทธ์ `pillButton`์ด๋ผ๋ ํด๋์ค๋ฅผ ์ค์ ๋ฒํผ ๋ชจ์์ ์คํ์ผ๋ง์ ์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ , ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํ๊ธฐ์ํด์ a ํ๊ทธ์ text-align: center ๋ฅผ ์ฃผ์๋ค. ๊ทธ๋ฐ๋ฐ!! ์์์ ์บก์ฒํ..
์๋ก ํ์๊ฐ์
ํ์ด์ง๋ฅผ ํ๋ก ํธ์์ ๋ฆฌ์กํธ๋ก ์ ์ํ๋ค. ์ฌ์ค์ ์ฐ๋ฆฌ ํ๋ก๋ํธ ์๋๋ฆฌ์ค์ ๋ฐ๋ฅด๋ฉด ํ์๊ฐ์
ํ์ด์ง๋ ๋ชจ๋ฐ์ผ ์ฑ ๋ด๋ถ์ ์น๋ทฐ๋ก ๋์์ง๋ ๋ชจ๋ฐ์ผ์ ์ข
์๋ ํ๋ฉด์ด๋ค. ๊ทธ๋ ์ง๋ง ๋ชจ๋ฐ์ผ ์ฑ์ด ๊ฐ๋ฐ๋๊ธฐ ์ด์ ์ ์นํ์ด์ง์ ์์ฒด์์๋ ํด๋น ๊ธฐ๋ฅ๋ค์ด ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ์น์์์ ์์์ ์ธ ์๋๋ฆฌ์ค๋ก ํด๋น ํ์ด์ง๋ฅผ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ด ์์ฑ๋๊ณ , ๋ด๊ฐ ๋ง๋ค์ด๋์ ์นํ์ด์ง๋ฅผ ์น๋ทฐ๋ก ์ฌ๋ฆฌ๋ ์์
์ ํ๋ค. ๊ฐ๋ฐ ํ๊ฒฝ ๋ชจ๋ฐ์ผ: flutter, ์น๋ทฐ ํจํค์ง flutter inappwebview ์นํ๋ก ํธ: react ์ด์ ๋ด๊ฐ ์ ์ํ ์นํ์ด์ง๊ฐ ์๋์ ๊ฐ์ด ๋ ๊ฐ์ง ์๋๋ฆฌ์ค๋ก ๋๋๊ฒ ๋ ๊ฒ์ด๋ค. 1. ๋ชจ๋ฐ์ผ ์น๋ทฐ์์ ๋์์ก์ ๋ 2. regular ์น ๋ธ๋ผ์ฐ์ ์์ ๋์ํ ๋ ๋ฐ๋ผ์ ๊ธฐ์กด ๋ฆฌ์กํธ ํ์ด์ง..
์๋ก ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๋ฐ์์ฌ๋, ์ด๋ฏธ์ง src ํ๊ทธ๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ string ํํ๋ก ๋ฐ๋ก ๋ฐ์์ฌ ์ ์๋ ๊ฒ์ด ์๋, ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์ ๋ณด + ์ด๋ฏธ์ง ํ์ผ ๋ค์ด๋ก๋๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ํ๋ฉด์ ๋์ธ ์ ์๋ค. 1. ์ด๋ฆ, ๋ ์ง ๋ฑ์ด ํฌํจ๋์ด์๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ api๋ฅผ ๋จผ์ ํธ์ถ 2. ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ค๊ธฐ ์ํ ์ด๋ฏธ์ง ํ์ผ์ ๋ค์ด๋ก๋ํ๋ api๋ฅผ ํธ์ถ ๋ ๊ฐ์ง๋ฅผ api๋ฅผ ํ์ฉํด์ ํ๋ฉด์ ์ด๋ฏธ์ง๋ฅผ ๋์ด๋ค. ๋ฌธ์ ์ด๋ฏธ์ง ๋ชฉ๋ก์ ํ๋ฉด์ ๋์ธ๋ string ํํ์ ์ด๋ฏธ์ง ๊ด๋ จ ๋ฐ์ดํฐ๋ง ๋์ฐ๋ ๊ฒ์ด ์๋ ์ด๋ฏธ์ง ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์์ ํ๋ฉด์ ํ์ถํด์ผํ๋, ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๋ชฉ๋ก์ ๋จผ์ ์ฟผ๋ฆฌ๋ก ๋ฐ์์ค๊ณ , ๋ฐ์์จ ๋ชฉ๋ก ์ ๋ณด๋ก ์ด๋ฏธ์ง ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๊ณ ๋์ ํ๋ฉด์ ๋ ๋๋งํ๊ฒ ํ๋ค. ๊ทธ๋ฌ๋๋ ์ ์ฒด ์ด๋ฏธ์ง๊ฐ ๋ค์ด๋ฐ์..
ํ๋ก์ ํธ ํด๋๊ตฌ์กฐ ๐ฆ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..
Form์ ์ ์ฅํ ๋ ํ์ํ input ์ํ๊ฐ์ object ํ์
์ผ๋ก ํ๋ฒ์ ๊ด๋ฆฌํ๊ณ , ๊ฐ input ๊ฐ์ด ๋ณ๋๋ ๋๋ง๋ค ์์ ๋ถ๋ชจ์์ handleChange ํจ์๋ฅผ ํธ์ถํ์ฌ form ์ํ๊ฐ์ ์ผ๊ด์ ์ผ๋ก ๊ด๋ฆฌํ๋ค. ์์ ๋ถ๋ชจ๋ ์ํ๊ฐ ๊ด๋ฆฌ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๊ณ , ํ์ ์ปดํฌ๋ํธ๋ ์์์์ ์ํ๊ฐ์ ๋ฐ์ ui ๋ง ๊ทธ๋ฆด ์ ์๋๋ก ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์๋ค. ๊ธฐ๋ณธ์ ์ธ ์ค๊ณ๋ ์์ ์ค๋ช
๊ณผ ๊ฐ์ด ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๋ ค๊ณ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋๋ฐ ์ด์ ์ ๋ง์ถ์๋๋ฐ, ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์์๋ค. ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ export const Form = () => { const initialFormValue: Info = { name: '', location: { address: '', detailAddress: '', zipCode..
์ค์๊ฐ ๊ฒ์์ด ์๋์์ฑ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๋๋ฐ, ๊ธฐ์กด์ ์ฝ๋๋ ๊ฒ์์ด input ๊ฐ์ด ๋ฐ๋๋๋ง๋ค ์๋ฒ์ api๋ฅผ ํธ์ถํ๋ค. ์ฑ๋ฅ ๊ฐ์ ์ ์ํด debounce๋ผ๋ ๊ฐ๋
์ ์ฝ๋์ ์๋ก ์ ์ฉํด๋ณด์๋ค. debounce๊ฐ ์ด๋ค ๊ฐ๋
์ด๋ฉฐ ์ด๊ฑธ react ์ฝ๋๋ก ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ์์๋ณธ๋ค. ๊ธฐ์กด ๊ฒ์ ์ปดํฌ๋ํธ useEffect(() => { getLazySearchList(); //api ํธ์ถ }, [searchInputValue]); setSearchInputValue(e.target.value) } /> ์ ์ฝ๋์์๋ useState hook์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ searchInputValue๊ฐ ๋ฐ๋๋๋ง๋ค ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ๋ค. ์ง๊ธ ์์ ์ฌ์ง์์ ๋ณด๋ฏ์ด ๊ฒ์์ฐฝ์ ์ ์ ๊ฐ ์๋ ์ฒ๋ผ ์
๋ ฅํ๋ฉด ใฑ > ๊ทธ > ๊ธ >..
์๋ก ๊ธฐ๋ณธ์ ์ธ Form ์ปดํฌ๋ํธ๊ฐ ์๋๋ฐ, ์ด๋ฆ, ์ฃผ์, ํธ๋ํฐ ๋ฒํธ๋ฅผ input์ผ๋ก ๋ฐ์ ์ ์๊ณ , ์ ์ฅ๋ฒํผ์ ๋๋ฅด๋ฉด input ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค. ์ด Form ์ปดํฌ๋ํธ๋ ์์ฑ์, ์์ ์ ์ฌ์ฌ์ฉํ ์ ์๋ ์ปดํฌ๋ํธ์ด๋ค. ์์ฑ์๊ธฐ๋ณธ input ์ด๊ธฐ ์ํ๊ฐ์ด ๋น string์ ๊ฐ์ง๋ค.์ ์ฅ ์ด๋ฒคํธ ๋ฐ์์ input ๋ฐ์ดํฐ ๊ฐ์ ๋ชจ์์ ์์ฑ์์ฒญ์ ๋ณด๋ด๋ ํจ์์ธ onCreateInfo๋ผ๋ ํจ์๋ฅผ ํธ์ถํ๋ค. ์์ ์์์ ์ปดํฌ๋ํธ์์ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ value๊ฐ์ ์ด๊ธฐ๊ฐ์ผ๋ก ๊ฐ์ง๋ค. ์ ์ฅ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด input ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์์ ์์ฒญ์ ๋ณด๋ด๋ onEditInfo๋ผ๋ ํจ์๋ฅผ ํธ์ถํ๋ค. interface Props { data?: Data; //์์ ์์๋ง ์กด์ฌ onCreateInfo?: (inputs: ..