получение возвращаемого значения из функции подтверждения оповещения, чтобы я мог установить для параметра editclicked значение false

#javascript #node.js #reactjs #callback

#javascript #node.js #reactjs #обратный вызов

Вопрос:

у меня есть функция confirm, которая запрашивает подтверждение через react-confirm-alert. мне нужно получить какой-то ответ от этой функции, если пользователь нажмет «да» или «нет», чтобы я мог установить для editClicked значение false. ниже приведен мой код.

 const handleClickUpdate = () => {
if (previousValue !== post)
  editPost(post, postId, "original")
    .then(() => setEditClicked(false))
    .catch(() => {
      confirm("edit", post, postId, editPost);
    });
 };




import { confirmAlert } from "react-confirm-alert";
export const confirm = (id, arg1, arg2, cb) => {
let title, message;

if (id === "delete") {
title = "Are you sure you want to delete this post";
message = "click yes to proceed";
} else {
title = "This post title already exists";
message = "Do you still want to continue";
}

confirmAlert({
title: title,
message: message,
buttons: [
  {
    label: "Yes",
    onClick: () => {
      id === "delete" ? cb(arg1, arg2) : cb(arg1, arg2, "duplicate");
    },
  },
  {
    label: "No",
    onClick: () => "no",
  },
],
});
};
 

Редактировать:

  1. Мне нужна функция подтверждения, чтобы вернуть некоторое значение обратно, чтобы дескриптор обновления щелчка мог установить состояние редактирования, нажатое на true или false, в зависимости от щелчка пользователя. Если пользователь нажал да, состояние будет false и наоборот
  2. onClick: () => "no" предположим, что если нажата кнопка no, есть ли способ вернуть значение, чтобы дескриптор click update, вызывающий функцию подтверждения, знал, что нажата кнопка no?

Ответ №1:

Я полагаю, вы могли бы передать обратный вызов cancel для call и передать значение обратно. Здесь я назвал это cb2 «обратный вызов 2».

 const confirm = (id, arg1, arg2, cb, cb2) => {
  let title, message;

  if (id === "delete") {
    title = "Are you sure you want to delete this post";
    message = "click yes to proceed";
  } else {
    title = "This post title already exists";
    message = "Do you still want to continue";
  }

  confirmAlert({
    title: title,
    message: message,
    buttons: [
      {
        label: "Yes",
        onClick: () => {
          id === "delete" ? cb(arg1, arg2) : cb(arg1, arg2, "duplicate");
        }
      },
      {
        label: "No",
        onClick: () => cb2("no") // <-- pass cancel value back out.
      }
    ]
  });
};
 

Пример использования:

 <button
  type="button"
  onClick={() =>
    confirm(
      "test",
      0,
      1,
      (...args) => console.log("confirmed", args),
      (value) => console.log("declined", value)
    )
  }
>
  Open Confirm
</button>
 

Более конкретный пример:

 confirm("edit", post, postId, editPost, cancelEditPost);
 

Редактировать получение возвращаемого значения из функции подтверждения оповещения, чтобы я мог установить для параметра seteditclicked значение