delete 버튼 이벤트관련 하여 질문드립니다.
선생님 서버액션을 이런식으로 사용하면 안되는걸까요?
굳이 버튼을 따로빼서 관리하는지 궁금합니다.
"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에서 이벤트 핸들러(특히 서버 요청을 다루는 경우)는 여러 가지 이유로 외부로 분리하여 관리하는 것이 일반적입니다. 여기에는 몇 가지 주요 이유가 있습니다:
의존성 감소 및 역할 분리: 이벤트 핸들러가 컴포넌트 밖으로 분리되어 있으면, 해당 핸들러를 독립적으로 관리하고 테스트할 수 있습니다. 이로 인해 각 부분의 역할이 명확해지고 유지보수가 용이합니다.
코드 가독성 및 유지보수성: 컴포넌트 안에 이벤트 핸들러를 직접 작성하면 코드가 복잡해지고 가독성이 떨어질 수 있습니다. 별도의 파일이나 함수로 분리하여 관리하면 코드가 더 깔끔하고 이해하기 쉬워집니다.
재사용성: 버튼 클릭 시 탑재되는 함수가 여러 컴포넌트에서 사용된다면, 별도의 함수로 만들어 재사용할 수 있습니다. 이렇게 하면 코드 중복을 피할 수 있습니다.
테스트 용이: 비즈니스 로직을 컴포넌트 밖으로 분리하면, 해당 로직을 단위 테스트할 수 있습니다. 이는 코드 품질을 높이는 데 기여합니다.
위의 내용을 바탕으로 이벤트 핸들러를 분리하여 관리하면 더 많은 혜택을 가져올 수 있습니다. 물론 프로젝트의 규모나 복잡도에 따라 이러한 방식을 반드시 따라야 하는 것은 아니지만, 일반적으로 이러한 구조가 여러 장점이 있습니다.
지금 참고할 만한 유사한 질문에 대한 답변은 아래 링크를 통해 확인해 보실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
풀라우트캐시 동작 원리에서 데이터 캐시 관련 질문
0
23
2
next.js 프로젝트
0
28
1
Next.js + Tanstack Query BFF 구조 질문
0
29
2
Next.js 사전렌더링 이해하기 부분
0
34
2
모달 관련 질문
0
42
3
렌더링 관련 질문
0
80
2
중복으로 하나의 api를 요청할 때 캐싱 옵션 통일화
0
64
2
라우트 세그먼트 옵션 강좌 노트에 사소한 제보 남깁니다.
0
65
2
SSR시 context에 params말고 query를 사용하면 안되나요?
0
75
2
npx prisma db push 시 에러가 뜹니다.
0
94
3
vercel 배포를 실패하였습니다.
0
101
3
Image 컴포넌트 사용시 브라우저 콘솔에 경고는 왜 뜨는걸까요?
0
57
2
getServerSideProps 함수와 SSR의 관계
0
78
6
없는 페이지인데 풀라우트캐시로 저장이 되는 이유가 궁금합니다
0
61
2
실제 프로젝트에서 SSR 사용에 관해서 질문드립니다.
0
117
2
일반적인 nextjs project architecture에 대하여..
0
90
2
2.14 Search에서 작성한건 static이긴하지만 CSR이 아닌가요?
0
74
2
배포 시 오류 발생
0
90
2
백엔드 서버 오류납니다.
0
83
2
취약점 제거시 nestjs 버전 문제가 생길까요?
0
93
1
eslint.config.mjs 내 rules 어떻게 설정 하나요?
0
107
1
[book]/[id]/page.tsx 모달 띄울 때 성능 하락 현상은 ReviewList를 불러오면서 발생하는 문제 같습니다.
0
63
2
빨간줄 설정
0
77
2
익스텐션 질문
0
61
1





