Inflearn brand logo image

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

He T (Tty)님의 프로필 이미지
He T (Tty)

작성한 질문수

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

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

[자체 해결]삭제하기 시 경고 alert 출력

작성

·

194

·

수정됨

0

안녕하세요. 7.7)리뷰 삭제 기능 구현하기를 하는 중인데, 혹시 바로 삭제하지 않고 중간에 alert 같은 걸로 정말 삭제할지 체크하고 그 다음에 삭제하는 식으로는 어떻게 하면 좋을까요? form 태그에 onsubmit을 달아서 중간에 끼어드는? 방식으로 해볼까 했는데, 뭔가 useActionState랑 호환을 어떻게 해야할지 잘 모르겠네요...

아래 코드를 작성해서 해결했습니다!

  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
    const confirmDelete = confirm(`댓글을 정말 삭제하시겠습니까?`);
    if (confirmDelete) {
      const form = e.currentTarget;
      form.requestSubmit(); // 폼을 강제로 제출
    }
  };

 

답변 3

0

저도 질문자님과 같이 구현을 시도하다가 공유하고 싶어서 답글 남깁니다.

사용자가 "삭제하기" 버튼을 클릭했을 때 삭제 확인 팝업이 나타나고, 사용자가 "확인"을 클릭했을 때만 폼이 제출되어야 합니다. 그러나 "취소"를 클릭했을 때도 폼이 제출되었습니다.

e.preventDefault()를 사용하여 기본 폼 제출 동작을 막고, 사용자가 "확인"을 클릭했을 때만 requestSubmit()이 호출해 폼을 제출하도록 구현했습니다.

"use client";

import { useActionState } from "react";
import deleteReviewAction from "@/actions/delete-review.action";

export default function ReviewItemDeleteButton({
  reviewId,
  bookId,
}: {
  reviewId: string;
  bookId: string;
}) {
  const [state, formAction, isPending] = useActionState(
    deleteReviewAction,
    null
  );

  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
    const confirmed = confirm("정말로 삭제하시겠습니까?");
    if (confirmed) e.currentTarget.requestSubmit();
    else e.preventDefault();
  };

  return (
    <form action={formAction} onSubmit={handleSubmit}>
      <input type="text" name="reviewId" value={reviewId} hidden readOnly />
      <input type="text" name="bookId" value={bookId} hidden readOnly />
      <button type="submit" disabled={isPending}>
        삭제하기
      </button>
    </form>
  );
}

0

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

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

UX 적으로 그렇게 처리하는 방법도 좋겠네요 🙂 좋은 제안 감사합니다.
자체적으로 해결하셨다니 더 멋집니다.

0

안녕하세요, 인프런 AI 인턴입니다. He T (Tty)님!

리뷰 삭제 기능을 구현하실 때, 사용자가 정말로 삭제할 것인지 확인하는 경고창을 추가하고 싶으신 것 같습니다. 이와 같은 상황에서는 JavaScript의 window.confirm 메서드를 활용하면 효과적입니다. window.confirm은 확인창을 띄워 사용자의 동의를 구할 수 있게 해줍니다.

다음은 간단한 예제 코드입니다:

const handleDelete = (id) => {
  if (window.confirm("정말로 삭제하시겠습니까?")) {
    // 여기서 실제 삭제 로직을 수행합니다.
    onDelete(id);
  }
};

// 사용 방식 예시
<button onClick={() => handleDelete(item.id)}>삭제</button>

이 코드는 사용자에게 삭제 여부를 확인한 후, onDelete 함수를 호출하여 리뷰 항목을 삭제하는 로직을 보여줍니다. window.confirm을 통해 사용자에게 확인 메시지를 표시하고, 사용자가 “확인”을 누르면 실제 삭제 로직이 실행됩니다.

form 태그의 onsubmit 대신 버튼 클릭 시 이벤트를 걸어 처리하는 방식이 더 일반적이며, 이는 프론트엔드 라이브러리 및 프레임워크(React, Next.js 등)에서 수월하게 사용할 수 있는 방법입니다.

추가적인 질문이 있으시면 언제든지 문의해 주세요. 기존의 게시물 중에서 유사한 사례나 해결방법이 있을 수도 있으니, 아래의 링크를 참고하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

He T (Tty)님의 프로필 이미지
He T (Tty)

작성한 질문수

질문하기