#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",
},
],
});
};
Редактировать:
- Мне нужна функция подтверждения, чтобы вернуть некоторое значение обратно, чтобы дескриптор обновления щелчка мог установить состояние редактирования, нажатое на true или false, в зависимости от щелчка пользователя. Если пользователь нажал да, состояние будет false и наоборот
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);