채널톡 아이콘

인프런 커뮤니티 질문&답변

uphoon님의 프로필 이미지

작성한 질문수 26

한 입 크기로 잘라먹는 Next.js(v15)

7.7) 리뷰 삭제 기능 구현하기

delete 버튼 이벤트관련 하여 질문드립니다.

해결된 질문

작성

·

63

0

선생님 서버액션을 이런식으로 사용하면 안되는걸까요?
굳이 버튼을 따로빼서 관리하는지 궁금합니다.

"use client";

import { ReviewData } from "@/types";
import { deleteReview } from "@/actions/create-review-action";

export default function ReviewList({
  id,
  content,
  author,
  createdAt,
}: ReviewData) {
  const onClickHandler = async () => {
    await deleteReview({ id: id });
  };

  return (
    <section>
      <span>{author}</span>
      <div>{content}</div>
      <p>{createdAt}</p>
      <button onClick={() => onClickHandler()}>삭제하기</button>
    </section>
  );
}

답변 2

1

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

결론부터 말씀드리면 굳이 ReviewItem 컴포넌트 전체를 클라이언트 컴포넌트로 전환할 이유가 없기 때문입니다. 버튼만 따로 빼서 클라이언트 컴포넌트로 전환하면 전체적인 클라이언트 컴포넌트 코드의 총량을 줄일 수 있어 JS Bundle의 사이즈를 감량하는 효과가 있기 때문이죠

이에 대해서는 언급하신 강의 챕터(7.7 챕터)의 1분 40초경 부터 설명드리고 있으니 해당 부분을 먼저 수강하시는걸 권장드립니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. uphoon님!

서버 액션을 관리하는 방법에 대해 질문을 주셨네요. React에서 이벤트 핸들러(특히 서버 요청을 다루는 경우)는 여러 가지 이유로 외부로 분리하여 관리하는 것이 일반적입니다. 여기에는 몇 가지 주요 이유가 있습니다:

  1. 의존성 감소 및 역할 분리: 이벤트 핸들러가 컴포넌트 밖으로 분리되어 있으면, 해당 핸들러를 독립적으로 관리하고 테스트할 수 있습니다. 이로 인해 각 부분의 역할이 명확해지고 유지보수가 용이합니다.

  2. 코드 가독성 및 유지보수성: 컴포넌트 안에 이벤트 핸들러를 직접 작성하면 코드가 복잡해지고 가독성이 떨어질 수 있습니다. 별도의 파일이나 함수로 분리하여 관리하면 코드가 더 깔끔하고 이해하기 쉬워집니다.

  3. 재사용성: 버튼 클릭 시 탑재되는 함수가 여러 컴포넌트에서 사용된다면, 별도의 함수로 만들어 재사용할 수 있습니다. 이렇게 하면 코드 중복을 피할 수 있습니다.

  4. 테스트 용이: 비즈니스 로직을 컴포넌트 밖으로 분리하면, 해당 로직을 단위 테스트할 수 있습니다. 이는 코드 품질을 높이는 데 기여합니다.

위의 내용을 바탕으로 이벤트 핸들러를 분리하여 관리하면 더 많은 혜택을 가져올 수 있습니다. 물론 프로젝트의 규모나 복잡도에 따라 이러한 방식을 반드시 따라야 하는 것은 아니지만, 일반적으로 이러한 구조가 여러 장점이 있습니다.

지금 참고할 만한 유사한 질문에 대한 답변은 아래 링크를 통해 확인해 보실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.