해결된 질문
작성
·
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
안녕하세요 이정환입니다.
결론부터 말씀드리면 굳이 ReviewItem 컴포넌트 전체를 클라이언트 컴포넌트로 전환할 이유가 없기 때문입니다. 버튼만 따로 빼서 클라이언트 컴포넌트로 전환하면 전체적인 클라이언트 컴포넌트 코드의 총량을 줄일 수 있어 JS Bundle의 사이즈를 감량하는 효과가 있기 때문이죠
이에 대해서는 언급하신 강의 챕터(7.7 챕터)의 1분 40초경 부터 설명드리고 있으니 해당 부분을 먼저 수강하시는걸 권장드립니다.
0
안녕하세요, 인프런 AI 인턴입니다. uphoon님!
서버 액션을 관리하는 방법에 대해 질문을 주셨네요. React에서 이벤트 핸들러(특히 서버 요청을 다루는 경우)는 여러 가지 이유로 외부로 분리하여 관리하는 것이 일반적입니다. 여기에는 몇 가지 주요 이유가 있습니다:
의존성 감소 및 역할 분리: 이벤트 핸들러가 컴포넌트 밖으로 분리되어 있으면, 해당 핸들러를 독립적으로 관리하고 테스트할 수 있습니다. 이로 인해 각 부분의 역할이 명확해지고 유지보수가 용이합니다.
코드 가독성 및 유지보수성: 컴포넌트 안에 이벤트 핸들러를 직접 작성하면 코드가 복잡해지고 가독성이 떨어질 수 있습니다. 별도의 파일이나 함수로 분리하여 관리하면 코드가 더 깔끔하고 이해하기 쉬워집니다.
재사용성: 버튼 클릭 시 탑재되는 함수가 여러 컴포넌트에서 사용된다면, 별도의 함수로 만들어 재사용할 수 있습니다. 이렇게 하면 코드 중복을 피할 수 있습니다.
테스트 용이: 비즈니스 로직을 컴포넌트 밖으로 분리하면, 해당 로직을 단위 테스트할 수 있습니다. 이는 코드 품질을 높이는 데 기여합니다.
위의 내용을 바탕으로 이벤트 핸들러를 분리하여 관리하면 더 많은 혜택을 가져올 수 있습니다. 물론 프로젝트의 규모나 복잡도에 따라 이러한 방식을 반드시 따라야 하는 것은 아니지만, 일반적으로 이러한 구조가 여러 장점이 있습니다.
지금 참고할 만한 유사한 질문에 대한 답변은 아래 링크를 통해 확인해 보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.