ํ๋ก์ ํธ ํด๋์์ ํ์ด์ง๋ฅผ ์คํํ๋ค npm run dev
๐client
โโโ ๐src
โ โโโ ๐component // ๋ชจ๋ component๋ค์ด ๋ชจ์ฌ์๋ ํด๋
โ โ โโโ ๐view // Page๋ค ์กด์ฌ
โ โ โ โโโ ๐UploadProductPageโญ๏ธ // ์
๋ก๋ ํ์ด์ง๋ฅผ ๋ง๋ค ํด๋ ์์ฑ
โ โ โ โโโ UploadProductPage.jsโญ๏ธ // ์
๋ก๋ ํ์ด์ง
โ โ โโโ App.js
โ โ โโโ Config.js
UploadProductPage.js
์์ rfce
๋ก functional component๋ฅผ ์์ฑํ๋ค.
App.js
์์ ์์ฑ
import UploadProductPage from './views/UploadProductPage/UploadProductPage';
๋ง๋ ์
๋ก๋ ํ์ด์ง component๋ฅผ importํ๊ณ
importํ component๋ฅผ Route component์ ์ถ๊ฐํ๋ค.
<Route exact path="/product/upload" component={Auth(UploadProductPage, true)} />
UploadProductPage๋ ๋ก๊ทธ์ธํ ์ฌ๋๋ง ์ ๊ทผํด์ผ๋๋ฏ๋ก true
๋ก ์ค์ ํ๋ค.
๊ฒฝ๋ก๋ ์ํ๋ ๋๋ก ์์ฑํ๋ค.
์ฐ์ ํ์ด์ง์ ์ ๊ทผํ๊ธฐ ์ํด ํ์๊ฐ์
ํ ๋ก๊ทธ์ธ์ ํ๋ค.
component > views > NavBar > Section > RightMenu.js
๋ก๊ทธ์ธ ํ ๋ณด์ด๋ ํญ ๋ฉ๋ด ์์ด์ฝ์ Upload ํญ์ ์ถ๊ฐํ๋ค.
antd๋ผ๋ CSS ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ <form>
์ ๋ง๋ ๋ค.
import React from 'react'
import { Typography, Button, Form, Input } from 'antd';
const { TextArea } = Input;
function UploadProductPage() {
return (
<div style={{ maxWidth: '700px', margin: '2rem auto' }}>
<div style={{ textAlign: 'center', marginBottom: '2rem' }}>
<h2 level={2}>์ฌํ ์ํ ์
๋ก๋</h2>
</div>
<Form>
{/* DropZone */}
<br />
<br />
<label>์ด๋ฆ</label>
<Input />
<br />
<br />
<label>์ค๋ช
</label>
<TextArea />
<br />
<br />
<label>๊ฐ๊ฒฉ($)</label>
<Input />
<br />
<br />
<select>
<option></option>
</select>
<br />
<br />
<Button>ํ์ธ</Button>
</Form>
</div>
)
}
export default UploadProductPage
input
์ value
๋ฅผ ์์ ํ๊ธฐ์ํด component์ onChange
event๋ฅผ ์ถ๊ฐํ๊ณ value์ state๋ฅผ ์์ฑํ๋ค.
const [Title, setTitle] = useState("");
const titleChangeHandler = (event) => {
setTitle(event.currentTarget.value);
}
return{
...
<Input onChange={titleChangeHandler} value={Title} />
}
<select><option></option></select>
์ ๊ฒฝ์ฐ, ์ฌ๋ฌ ๊ฐ์ <option>
์ ๋ง๋ค์ง ์๊ณ
์๋จ์ Continents
๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ ๋ค. (UploadProductPage ๋ฐ์)
const Continents = [
{ key: 1, value: "Africa" },
{ key: 2, value: "Europe" },
{ key: 3, value: "Asia" },
{ key: 4, value: "North America" },
{ key: 5, value: "South America" },
{ key: 6, value: "Australia" },
{ key: 7, value: "Antarctica" }
]
๊ทธ๋ฆฌ๊ณ map()
์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅํ๋ค.
<select>
{Continents.map(item => (
<option key={item.key} value={item.key}>{item.value}</option>
))}
</select>
์ด๊ฒ๋ ๊ฐ์ด ๋ฐ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ onChange
๋ฅผ ์ ์ํ๋ค.
<select onChange={continentChangeHandler} value={Continent}>
{Continents.map(item => (
<option key={item.key} value={item.key}>{item.value}</option>
))}
</select>