2022. 11. 15. 23:22
3-1. 이미지업로드 게시글과 이어지는 내용이다.
3-1게시글에선 업로드가 가능할 수 있는 기능만 추가해준 것이고
3-2에선 확실하게 마운트 시켜주고 삭제시키는 기능을 구현했다.
# 메소드 영역
import {storageService} from "Fbase";
//Fbase.js에서 getStorage from "firebase/storage"를 가져온 것
import {ref, uploadString, getDownloadURL } from "@firebase/storage";
import { v4 as uuidv4 } from 'uuid';
export const Home = ({ userObj }) {
//...
const [attachment, setAttachment] = useState("");
//업로드할 사진을 위한 스테이트
const onSubmit = async (event)=> {
event.preventDefault();
let attachmentUrl = ""; //서로 영역에서 사용하기 위해 let으로 선언하여 업데이트함.
try{
if(attachment !== "") {
const attachmentRef = ref(storageService, `${userObj.uid}/${uuidv4()}`);
//uuidv4는 랜덤으로 스트링을 만들어준다.
const response = await uploadString(attachmentRef, attachment, "data_url");
//"data_url"은 readAsDataURL에서 전달받는다.
attachmentUrl = await getDownloadURL(response.ref);
}
const zweetObj = {
text: zweet,
createdAt: Date.now(),
creatorId: userObj.uid,
attachmentUrl //zweetObj에서 attachmentUrl이 추가되었다.
};
await addDoc(collection(dbService, "zweets"),zweetObj);
} catch (error) {
console.error("Error adding document: ", error);
}
setZweet("");
setAttachment(""); //서브밋 후 초기화
};
Home.js에서 onSubmit함수의 변경사항
const onDeleteClick = async () => {
const ok = window.confirm("Are you sure you want to delete this zweet?");
if(ok){
await deleteDoc(zweetTextRef);
await deleteObject(ref(storageService, zweetObj.attachmentUrl));
//이미지가 있다면 이미지도 지워줘야 하기때문에 추가
}
};
Zweet.js에서 onDeleteClick함수의 변경사항
# 컴포넌트 마운트 영역
<div>
<h4>{zweetObj.text}</h4>
{zweetObj.attachmentUrl && <img src={zweetObj.attachmentUrl} width="50px" height="50px"/>}
//zweetObj에 attachmentUrl(이미지파일url)리터럴이 생겼기 때문에 zweetObj.attachmentUrl로 변경
...
</div>
지우거나 업로드 했을때 사진도 함께 업로드 되거나 삭제되어야 하기때문에 함수들에 변경사항이 생겼다.
'Serverless > FireBase' 카테고리의 다른 글
[ Fire Base / ver. 9.14.0 ] 4. 프로필 기능 (0) | 2022.11.17 |
---|---|
[ Fire Base / ver. 9.14.0 ] 3-1. 이미지 업로드 (0) | 2022.11.15 |
[ Fire Base / ver. 9.14.0 ] 2. 업로드된 컴포넌트 삭제/수정 기능 (0) | 2022.11.14 |
[ Fire Base / ver. 9.14.0 ] 1. Real Time(실시간) 기능 (0) | 2022.11.14 |
[ Fire Base / ver. 9.14.0 ] Setup (0) | 2022.11.12 |