Comment delete

순9·2023년 12월 18일
0

리액트 게시판

목록 보기
47/54

등록과 기존 코드와 크게 변동 사항 없음
삭제에서 변동 사항 있음

문제점 동일한 사용자면 이 사용자의 모든 댓글이 사라짐

아래는 삭제 관련 코드

기존

const handleCommentDelete = () => {
    try {
      dispatch(
        deleteComment({
          boardId: selectedBoardId,
          dataCUid: userId || "",
        }) as any
      );
    } catch (error) {}
    

thunk

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 }));
      }
    }

slice

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
);
전체 댓글 데이터에서 관련 된 조건을 찾은 후 반환

thunk

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걸리면
반복문을 중지함)

slice

 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에 담아라

filter
find

현재 상황
댓글에서 문제 펑펑 터짐..등록은 정상적으로 되는데
수정과 삭제 그리고 대댓글에서 문제 생김..
댓글 삭제는 0번, 1번 데이터가 있을때 0번 데이터 삭제 하면 1번이
0번으로 순서가 정리되어서 데이터가 꼬임😱

profile
1. 사용법 익히기 2. 원리가 뭔지 찾아보기 3. 원리를 공부하기

2개의 댓글

comment-user-thumbnail
2024년 3월 13일

이 훌륭한 주제에 대한 귀중한 정보에 진심으로 감사드리며 더 많은 훌륭한 기사를 기대합니다. gorilla tag

답글 달기
comment-user-thumbnail
2024년 4월 5일

Discover and exploit truly wonderful diverse sources of information. Easily access diverse knowledge. It's tempting to experience so much soccer random

답글 달기