diff --git a/src/App.jsx b/src/App.jsx index cd5bbf66..90e666fe 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,5 @@ import { Route, Routes } from "react-router"; -import AddItem from "./components/Additem/AddItem"; +import AddItem from "./components/AddItem/AddItem"; import Nav from "./common/Nav/Nav"; import Items from "./components/Items/Items"; import Products from "./components/Products/Products"; diff --git a/src/components/AddItem/AddItem.jsx b/src/components/AddItem/AddItem.jsx index 76b03490..f9e478a5 100644 --- a/src/components/AddItem/AddItem.jsx +++ b/src/components/AddItem/AddItem.jsx @@ -1,3 +1,168 @@ +import styles from "./AddItem.module.scss"; +import { useState, useRef } from "react"; + export default function AddItem() { - return
addItem
; + const [imagePreview, setimagePreview] = useState(null); + const [formData, setFormData] = useState({ + image: "", + name: "", + about: "", + price: "", + tag: [], + }); + const inputRef = useRef(); + const active = Object.values(formData).every((value) => + Array.isArray(value) ? value.length > 0 : value + ); + + function handleChange(e) { + const { name, value } = e.target; + if (name === "image") { + const newImage = e.target.files[0]; + setimagePreview(URL.createObjectURL(newImage)); + setFormData((prev) => ({ ...prev, image: newImage })); + } else { + setFormData((prev) => ({ ...prev, [name]: value })); + } + } + function handleTag(e) { + if (e.key === "Enter") { + e.preventDefault(); //폼 내부에서 엔터 -> 자동 제출되는거 막음 + setTimeout(() => { + const newValue = inputRef.current.value.trim(); + if (newValue) { + setFormData((prev) => ({ + ...prev, + tag: [...prev.tag, newValue], + })); + } + inputRef.current.value = ""; + }, 0); + } + } + const handleSubmit = (e) => { + e.preventDefault(); + console.log(formData); // 서버 전송 등 처리 + }; + + console.log(formData); + function handleRemoveTag(tagToRemove) { + setFormData((prev) => ({ + ...prev, + tag: prev.tag.filter((tag) => tag !== tagToRemove), + })); + } + + return ( + <> +
+
+

상품 등록하기

+ +
+
+
+ + + {formData.image && ( +
+ 미리보기 +
+ )} +
+ {formData.image && ( +

+ *이미지 등록은 최대 1개까지 가능합니다. +

+ )} + + + +