React JS, вызывающий функцию и закрывающий диалоговое окно по щелчку

#reactjs #dialog #modal-dialog #confirm

#reactjs #диалоговое #модальный диалог #подтвердите

Вопрос:

Я совершенно новичок в React. Мне пришлось отредактировать чей-то код, чтобы добавить новую функциональность.

При нажатии на ссылку код показывает диалоговое окно подтверждения с использованием modal. Когда пользователь нажимает «Да», он должен очистить текст в области (путем вызова функции), а затем закрыть диалоговое окно, при нажатии на «Отмена» диалоговое окно должно просто закрыться.

Я изменил код, чтобы кнопка отмены работала нормально. Но когда я нажимаю на да, это вызывает функцию и очищает текст, но не закрывает диалоговое окно. Мой код ниже.

     function ConfirmModal({resetNewQuery, visible, onClose }) {
    
 
  return (
    <>
      <Modal
        width={500}
        title="Confirmation"
        visible={visible}
        onClose={onClose}
      >
        <div><b>Are you sure you want to clear query? All the contents will be deleted!</b></div>
        <div/>
        <div/>
      <Button size="btnsm" variant="primary" onClick={()=>resetNewQuery(),{onClose}}>Yes</Button>
        <Button size="btnsm" variant="primary" onClick={onClose}>Cancel</Button>
      </Modal>
    </>
  );
}
  

Код для модального

     function Modal({ title, visible, onClose, width, children }) {
  if (visible) {
    return (
      <Dialog
        aria-label={title}
        onDismiss={onClose}
        className={styles.Dialog}
        style={{
          width,
        }}
      >
        <div className={styles.titleWrapper}>
          <span>{title}</span>
          {onClose amp;amp; (
        
            <div class="iconwrapper" onClick={onClose}>
              <CloseIcon />
            </div>
          )}
        </div>
        <div className={styles.dialogBody}>{children}</div>
      </Dialog>
    );
  }
  return null;
}
  

Как можно добиться очистки запроса и закрытия диалогового окна при нажатии да.

Ответ №1:

привет, @Sudiv, проблема здесь

 <Button size="btnsm" variant="primary" onClick={()=>resetNewQuery(),{onClose}}>Yes</Button>
  

когда вы передаете обратный вызов onClick, вам нужно открыть фигурные скобки, если вы хотите вызвать несколько функций

 onClick={() => {
 resetQuery();
 onClose();
}}
  

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

 onClick={() => onClickHanlder()}

onClickHandler = () => {
 resetQuery();
 onClose();
}
  

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

1. Спасибо @aleEspinosaM. Это решило мою проблему 🙂 . Однако, один вопрос, прежде чем перейти к stack exchange, я попробовал ваше точное решение, но без () в OnClose. как onClick={() => { resetQuery(); {OnClose} }} и onClick={() => { resetQuery(); OnClose = {OnClose} }} Но это выдавало ошибку. Я думал, что OnClose является переменной. Что именно здесь происходит? Как добавление () в OnClose решило проблему. Просто любопытно.

2. поскольку onclose — это функция, а не переменная, вам нужно будет вызвать функцию,