codestates / codestates/FilmStorage

[DevLog] 서외구 / 2022-04-01

Open
#221 0 comments 0 reactions 0 assignees View on GitHub
DevLog
Dominant language
JavaScript
Stars
5
Forks
5
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?

- 필름로그 작성시 장소 지정 가능 구현
- 주말날씨 확인 페이지 작성

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?

- 카카오 맵 API 사용시 클릭한 장소 이름 상태 관리
- 상태 끌어올리기시 상태를 관리는 상단에 선언하고 관리함수를 props.로 보내줘야 한다.
- 제일 좋은 방법은 상태는 단방향으로 해야하지만, 필요한곳이 있음
- Redux를 공부해서 상태관리를 좀더 효율적으로 하고 싶음

```js
export default function FilmLogWriting({ userInfo, setIsOpen }) {
// 유저 정보 상태 관리
const [photoInfo, setPhotoInfo] = useState({
photo: {},
type: "",
contents: "",
});
// 위치 정보 상태 관리
const [inputText, setInputText] = useState("");
const [place, setPlace] = useState("");

// 선택된 장소
const [clickLocation, setClickLocation] = useState({});

console.log(clickLocation);

const onChange = (e) => {
setInputText(e.target.value);
};

const handleSubmit = (e) => {
e.preventDefault();
setPlace(inputText);
setInputText("");
};

// 이미지 미리보는 상태
const [files, setFiles] = useState("");

// 이미지 미리보기 삽입 기능
const encodeFileTobase64 = (fileBlob) => {
const reader = new FileReader();
reader.readAsDataURL(fileBlob);
return new Promise((resolve) => {
reader.onload = () => {
setFiles(reader.result);
setPhotoInfo({ ...photoInfo, photo: fileBlob });
resolve();
};
});
};
// 이미지 수정 버튼
const handleRevison = () => {
setFiles("");
setPhotoInfo({ ...photoInfo, photo: "" });
};

// 내용 상태 관리 함수
const handleContents = (e) => {
setPhotoInfo({ ...photoInfo, contents: e.target.value });
};

const filmlogRegister = () => {
const postData = { filmtype: photoInfo.type, contents: photoInfo.contents };
axios
.post(
`${process.env.REACT_APP_API_URL}/filmlogs/register/${userInfo.id}`,
postData,
{
headers: {
"Content-type": "application/json",
},
}
)
.then((res) => {
const { id } = res.data.data;
const formData = new FormData();
formData.set("photo", photoInfo.photo);
// console.log("폼데이터 확인", formData);
axios
.patch(
`${process.env.REACT_APP_API_URL}/filmlogs/revision/photo/${userInfo.id}/${id}`,
formData,
{
headers: {
"Content-type": "multipart/form-data",
},
}
)
.then((res) => {
alert("등록이 완료되었습니다");
// isOpen 상태 변경 / setIsOpen(true)// 상위에서 props로 전달받아 적용
setIsOpen(false);
})
.catch((err) => console.log(err));
})
.catch((err) => {
console.log(err);
alert("서버 연결이 불안정 합니다.");
});
};

return (
<>
setIsOpen()}>
e.stopPropagation()}>


setIsOpen()}>



사진 등록 하기


handleRevison()}>수정
filmlogRegister()}>등록




{files && (
preview-img
)}

사진을

등록 해주세요.


업로드
{
encodeFileTobase64(e.target.files[0]);
}}
>







{userInfo.nickname}



필름선택


<textarea
className="filmcontent"
placeholder="내용입력"
onChange={handleContents}
>


장소선택






{clickLocation.Location}



```

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

- [ ] 좋아요 기능 구현
- [ ] 현재 좌표로 한글지명으로 랜더링 기능 구현

Contributor guide

No contributing guide indexed for this repository

Research direction

This is a DevLog entry describing completed location and weather work, with future checklist items for likes and Korean place names. No specific file, test, or unresolved implementation request is identified, so first clarify which checklist item remains in scope before looking for the related frontend entry point.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, react
Domain
frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
15/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.