s e o p p o r t . l o g

Today I Learned

redux toolkit으로 댓글 상태 관리하기

Seo Ji Won 2024. 2. 26. 19:23

 

reducers: {
    setReview: (state, action) => {
      //페이로드: 리뷰 데이터 전체
      return { ...state, reviews: action.payload };
    },
    addReview: (state, action) => {
      //페이로드: 리뷰 데이터 객체 하나
      return { ...state, reviews: [...state.reviews, action.payload] };
    },
    modifyReview: (state, action) => {
      //페이로드: 리뷰아이디, 수정된 리뷰 내용, 평점
      const targetReviewId = action.payload.reviewId;
      const modifiedContent = action.payload.modifiedContent;
      const modifiedGrade = action.payload.modifiedGrade;
// 전체를 돌면서 
      const modifiedReviews = state.reviews.map((item) => {
// 수정할 리뷰를 찾음
        if (item.id === targetReviewId) {
// 그 수정할 리뷰= item을 펼치고 수정된 내용을 적용함
          return { ...item, content: modifiedContent, grade: modifiedGrade };
// 나머지는 그대로 return
        } else return item;
      });
// review를 아예 수정된 리뷰를 포함하고 있는 새 리뷰 배열로 교체
      return { ...state, reviews: modifiedReviews };
    }
  }

 

각 리듀서에 어떤 페이로드가 들어올지 주석으로 작성해놓고 리듀서를 작성하면 편하다.