이번주에 내가 주로 맡아서 한 부분은 유저 프로필 파트와 모달 띄우기 파트였다. 상대적으로 난이도가 그렇게 어렵지는 않았으나 사진 올리기, CSS Modal 자체가 처음 도전하는 챌린지적인 면이 있어서 이번주 어려웠던 점으로 기록하고자 한다.
(header.jsx)
...
...
const navigate = useNavigate();
const [modalOn, setModalOn] = useState(false);
const handleModal = () => {
setModalOn(true);
};
return (
<div>
<h1
onClick={() => {
navigate("/");
}}
>
HOME
</h1>
<Span
onClick={() => {
navigate("/postread");
}}
>
MacBook
</Span>
<Span
onClick={() => {
navigate("/postread");
}}
>
iPhone
</Span>
<button
onClick={() => {
navigate("/signin");
}}
>
로그인
</button>
<button
onClick={() => {
navigate("/mypage");
}}
>
마이페이지
</button>
<button onClick={handleModal}>모달켜기</button>
{modalOn && <Modal setModalOn={setModalOn} />}
</div>
);
};
export default Header;
...
...
(modal.jsx)
...
...
const Modal = (props) => {
// 토글
const [toggle, setToggle] = useState(true);
const navigate = useNavigate();
// 토글 핸들러
const toggleBtnHandle = () => {
setToggle(!toggle);
};
const handleModal = () => {
props.setModalOn(false);
};
return (
<Background>
<Content>
<button onClick={handleModal}>모달끄기</button>
<button
onClick={() => {
navigate("/postcreate");
}}
>
상품등록
</button>
<button
onClick={() => {
navigate("/objectionread");
}}
>
이의제기
</button>
<PricingInput />
</Content>
</Background>
);
};
...
(mypageUpdate.jsx)
const MypageUpdate = () => {
const uploadedImage = React.useRef(null);
const imageUploader = React.useRef(null);
const [photo, setPhoto] = useState(null);
// 사진을 저장하는 로직이 없었다.
const navigate = useNavigate();
const dispatch = useDispatch();
const onClickHandler = () => {
navigate("/mypage");
};
const handleImageUpload = e => {
const [file] = e.target.files;
if (file) {
const reader = new FileReader();
const { current } = uploadedImage;
current.file = file;
reader.onload = e => {
current.src = e.target.result;
};
reader.readAsDataURL(file);
setPhoto(file)
}
};
const [write, setWrite, writeHandle] = useInput({
// 임시 : 00님 코드 확인 필요
email : "damin1@naver.com",
nickname : "damin1",
password : "damin1234",
});
// const {profile} = useSelector((state) => state.login)
//get 해오기
useEffect(() => {
dispatch(__UserProfileEdit);
}, [dispatch]);
const nicknameEdit = () => {
// 백엔드와 협의 필요
const formData = new FormData();
formData.append("image", photo)
const obj = {
// 임시
// 나중에 이미지 url을 받아서 뿌려야 함.
email : write.email,
nickname : write.nickname,
password : write.password
}
formData.append(
"memberReqDto",
new Blob([JSON.stringify(obj)], {type : "application/json"})
);
dispatch(__UserProfileEdit(formData));
}
...
...
const dispatch = useDispatch()
const {user} = useSelector((state) => state.Login)
//get 해오기
useEffect(() => {
dispatch(__UserProfile());
}, [dispatch]);
return (
<div><Header/>
<div>
<img src={user.profileImg} />
{user.nickname}
{user.email}
</div>
...
...