등록과 기존 코드와 크게 변동 사항 없음
삭제에서 변동 사항 있음
문제점 동일한 사용자면 이 사용자의 모든 댓글이 사라짐
아래는 삭제 관련 코드
const handleCommentDelete = () => {
try {
dispatch(
deleteComment({
boardId: selectedBoardId,
dataCUid: userId || "",
}) as any
);
} catch (error) {}
for (const [index, docC] of commentDoc.docs.entries()) {
const dataC = docC.data();
const dataCUid = dataC.dataCUid;
const dataIndex = dataC.numIndex;
const docId = docC.id;
if (dataCUid === userId && dataIndex === docId) {
const docRef = doc(lastCallectionRef, dataIndex);
await deleteDoc(docRef);
thunkAPI.dispatch(deleteCommentSlice({ boardId, dataCUid }));
}
}
deleteCommentSlice: (state, action) => {
const { boardId, dataCUid } = action.payload;
const filteredComments = state.boardComment[boardId].filter(
(comm) => comm.dataCUid !== dataCUid
);
console.log(filteredComments);
state.boardComment[boardId] = filteredComments;
},
상태관리에서 데이터와 파이어베이스의 데이터를 비교 해서
관련 데이터를 삭제
파베 데이터 경로
const userCollection = collection(firestore, "users");
const userDocRef = doc(userCollection, "userData");
const subCollectionRef = collection(userDocRef, boardId.toString());
//삭제 함수
const handleCommentDelete = async (numIndexToDelete: string) => {
const confirmDelete = window.confirm("삭제 하시 겠습니까?");
if (!confirmDelete) {
return;
}
const specificDoc = await getDocs(subCollectionRef);
for (const [index, docI] of specificDoc.docs.entries()) {
const data = docI.data();
const dataIndex = data.index;
const docRef = doc(subCollectionRef, dataIndex);
const lastCallectionRef = collection(docRef, "comment");
const commentDoc = await getDocs(lastCallectionRef);
for (const [index, docC] of commentDoc.docs.entries()) {
const dataC = docC.data();
const dataIndex = dataC.numIndex;
try {
const foundComment = userinputComments[boardId]?.find(
(e: any) =>
e.numIndex === dataIndex && e.dataCUid === userCommentUid
);
console.log(foundComment);
if (foundComment) {
dispatch(
deleteComment({
boardId: boardId,
dataCUid: userCommentUid || "",
numIndex: numIndexToDelete,
}) as any
);
}
} catch (error) {}
}
}
};
<input
type="button"
onClick={() = handleCommentDelete(item.numIndex)}
value="삭제"
/>
const foundComment = userinputComments[boardId]?.find(
(e: any) =>
e.numIndex === dataIndex && e.dataCUid === userCommentUid
);
전체 댓글 데이터에서 관련 된 조건을 찾은 후 반환
let commentDeleted = false; // 선택한 댓글이 삭제되었는지 여부를 나타내는 플래그
for (const [index, docC] of commentDoc.docs.entries()) {
const dataC = docC.data();
const dataCUid = dataC.dataCUid;
const dataIndex = dataC.numIndex;
const docId = docC.id;
if (dataCUid === userId && dataIndex === numIndex) {
console.log("--------------");
const docRef = doc(lastCallectionRef, dataIndex);
await deleteDoc(docRef);
thunkAPI.dispatch(deleteCommentSlice({ boardId, dataCUid, numIndex }));
commentDeleted = true; // 댓글이 삭제되었음을 표시
break; // 루프를 중지
}
}
if (commentDeleted) {
break; // 댓글이 삭제되었을 경우 전체 반복문 중지
}
조건에 맞춰 반복문을 빠져 나갈 수 있게 장치를 걸고
선택한 numIndex와 유저 정보가 같으면 해당 데이터를 삭제하고
반복문 중지(for문의 안에 있는 if문의 조건이 실행 후 break걸리면
반복문을 중지함)
deleteCommentSlice: (state, action) => {
const { boardId, dataCUid, numIndex } = action.payload;
const comments = state.boardComment[boardId] || [];
const filteredComments = comments.filter(
(comm) => !(comm.dataCUid === dataCUid && comm.numIndex === numIndex)
);
console.log(filteredComments);
state.boardComment[boardId] = filteredComments;
},
comments에 필터를 걸어서 comm.dataCUid === dataCUid && comm.numIndex === numIndex 이 조건들의 반대인 애들을 filteredComments에 담아라
현재 상황
댓글에서 문제 펑펑 터짐..등록은 정상적으로 되는데
수정과 삭제 그리고 대댓글에서 문제 생김..
댓글 삭제는 0번, 1번 데이터가 있을때 0번 데이터 삭제 하면 1번이
0번으로 순서가 정리되어서 데이터가 꼬임😱
Discover and exploit truly wonderful diverse sources of information. Easily access diverse knowledge. It's tempting to experience so much soccer random
이 훌륭한 주제에 대한 귀중한 정보에 진심으로 감사드리며 더 많은 훌륭한 기사를 기대합니다. gorilla tag