Как я могу добавить кнопку отмены в уведомление о тостах?

#javascript #node.js #reactjs #toast #react-toastify

Вопрос:

https://codesandbox.io/s/l2qkywz7xl?from-embed=amp;file=/index.js

Привет, ссылаясь на вышеприведенную песочницу, я тоже хотел бы что-то сделать со своей таблицей, как я могу добавить функцию отмены в свой код?

 import { toast, ToastContainer } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
toast.configure()
  const deleteCustomer = (ID) => {
    if (window.confirm("Are you sure you want to delete?")) {
      Axios.delete(`http://localhost:3001/stats/delete/${ID}`).then(
        (response) => {
    toast("row deleted");
          setCustomerList(
            customerList.filter((val) => {
              toast("notify");
              console.log("toast notify run");
              return val.ID !== ID;
            })
          );
        }
      );
    }
  };
const displayCustomers = customerList
    .slice(pagesVisited, pagesVisited   customersPerPage)
    .map((val, key) => {
      const dateStr = new Date(val.latest_time_of_visit).toLocaleDateString(
        "en-CA"
      );
      const timeStr = new Date(val.latest_time_of_visit).toLocaleTimeString();
      const dateTime = `${dateStr} ${timeStr}`;
      const my_serial = key   pageNumber * customersPerPage;

      return (
        <tr>
          {/*}
          <td>{val.ID}</td>
      
          <td>{my_serial   1}</td>
      */}
          <td>{val.name}</td>
          <td>{val.email}</td>
          <td>{val.company_name}</td>
          <td>{val.counts_of_visit}</td>
          <td>{dateTime}</td>
          <td>{val.contacted}</td>
          <td>
            <select
              onChange={(event) => {
                setNewContacted(event.target.value);
              }}
            >
              <option value="" selected disabled hidden>
                Select Yes/No
              </option>
              <option value="Yes">Yes</option>
              <option value="No">No</option>
            </select>
            <button
              className="btn btn-primary"
              onClick={() => {
                updateCustomerContacted(val.ID);
              }}
            >
              Update
            </button>
          </td>
          <td>
            <button
              className="btn btn-danger"
              onClick={() => {
                deleteCustomer(val.ID);
              }}
            >
              Delete
            </button>
 

Итак, после того, как я нажму кнопку удаления, которая вызывает параметр удаления, появится моя строка записи тоста удалена, но как я могу добавить к ней кнопку отмены?

Комментарии:

1. Из песочницы кнопка отмены уже есть в вашем тосте? Так в чем же именно заключается ваш вопрос?

2. @RobertTirta из моего опубликованного кода, как я могу добавить кнопку отмены в всплывающее уведомление

3. Я вижу, вы тоже используете "react-toastify"; пакет? вы хотите показать нам свою песочницу кода, чтобы мы могли ее отредактировать? Мне нужно больше контекста. Если вы пытаетесь использовать один и тот же пакет или другой и т. Д.

4. @RobertTirta Я также использую пакет react toastify, я не уверен, как создать песочницу.. так как мои данные извлекаются из внутреннего api

5. @RobertTirta ????

Ответ №1:

Вы забыли указать <ToastContainer /> , как указано в документах, для монтируемого компонента.

Затем вам нужно поместить компонент в toast() функцию в качестве кнопки отмены, чтобы включить свою логику.

Ваш код, поскольку он не завершен, должен быть где-то примерно так

 import { toast, ToastContainer } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
toast.configure()
  const deleteCustomer = (ID) => {
    if (window.confirm("Are you sure you want to delete?")) {
      Axios.delete(`http://localhost:3001/stats/delete/${ID}`).then(
        (response) => {
    toast("row deleted");
          setCustomerList(
            customerList.filter((val) => {
              toast(<button onClick={() => console.log("your undo logic here"}>UNDO</button>);
              return val.ID !== ID;
            })
          );
        }
      );
    }
  };
const displayCustomers = customerList
    .slice(pagesVisited, pagesVisited   customersPerPage)
    .map((val, key) => {
      const dateStr = new Date(val.latest_time_of_visit).toLocaleDateString(
        "en-CA"
      );
      const timeStr = new Date(val.latest_time_of_visit).toLocaleTimeString();
      const dateTime = `${dateStr} ${timeStr}`;
      const my_serial = key   pageNumber * customersPerPage;

      return (
        <tr>
          {/*}
          <td>{val.ID}</td>
      
          <td>{my_serial   1}</td>
      */}
          <td>{val.name}</td>
          <td>{val.email}</td>
          <td>{val.company_name}</td>
          <td>{val.counts_of_visit}</td>
          <td>{dateTime}</td>
          <td>{val.contacted}</td>
          <td>
            <select
              onChange={(event) => {
                setNewContacted(event.target.value);
              }}
            >
              <option value="" selected disabled hidden>
                Select Yes/No
              </option>
              <option value="Yes">Yes</option>
              <option value="No">No</option>
            </select>
            <button
              className="btn btn-primary"
              onClick={() => {
                updateCustomerContacted(val.ID);
              }}
            >
              Update
            </button>
          </td>
          <td>
            <button
              className="btn btn-danger"
              onClick={() => {
                deleteCustomer(val.ID);
              }}
            >
              Delete
            </button>
          </td>
          <ToastContainer closeOnClick={false} closeButton={false} />

 

Комментарии:

1. так это, по сути, дополнение к этому? <ToastContainer closeOnClick={false} closeButton={false} /> Но как добавить кнопку отмены в функцию toast ()?

2. Я просто покажу вам, как toast() функция принимает компонент в качестве параметра. Так что вам придется сделать компонент самостоятельно, я также вставил кнопку «Отменить». Пожалуйста, обратитесь к моему коду

3. тира о, я не вижу, можно ли создать фрагмент кода, это <ToastContainer closeOnClick={false} closeButton={false}/>, который создает кнопку?

4. Тира, так как же??? это контейнер для тостов, а затем создайте компонент?

5. Вы хотя бы пробовали скопировать и вставить мой код? @fyceheist