Правильное использование window.confirm для onClick в JSX [дубликат]

Возможно, проблема в конфигурации почтового сервера, чтобы избежать подобных проблем или вам не нужно беспокоиться о проблеме с почтовым сервером, я рекомендую вам использовать PHPMailer , это плагин у которого есть все необходимое для отправки почты, единственное, что вы должны учесть, это иметь SMTP-порт (порт: 25 и 465), включен

require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
       //Server settings
       $mail->SMTPDebug = 0;                                 
       $mail->isSMTP();                                      
       $mail->Host = 'smtp.gmail.com';  
       $mail->SMTPAuth = true;                               
       $mail->Username = 'correo@gmail.com';                 
       $mail->Password = 'contrasenia';                           
       $mail->SMTPSecure = 'ssl';                          
       $mail->Port = 465;                                    

       //Recipients
       $mail->setFrom('correo@gmail.com', 'my name');    
       $mail->addAddress('destination@correo.com');               

       //Attachments
       $mail->addAttachment('optional file');         // Add files, is optional

       //Content
       $mail->isHTML(true);// Set email format to HTML
       $mail->Subject = utf8_decode("subject");
       $mail->Body    = utf8_decode("mail content");
       $mail->AltBody = '';
       $mail->send();
     }
     catch (Exception $e){
        $error = $mail->ErrorInfo;
     }

44
задан Wordpressor 30 March 2016 в 18:28
поделиться

11 ответов

Реагирующие события на самом деле являются синтетическими событиями, а не родными событиями. Как написано здесь :

Делегирование событий: React фактически не присоединяет обработчики событий к самим узлам. Когда React запускается, он начинает прослушивать все события на верхнем уровне с помощью одного прослушивателя событий. Когда компонент монтируется или размонтируется, обработчики событий просто добавляются или удаляются из внутреннего сопоставления. Когда происходит событие, React знает, как его отправить, используя это сопоставление. Когда в сопоставлении нет обработчиков событий, обработчики событий React являются простыми no-ops.

Попробуйте использовать Use Event.stopImmediatePropagation:

upvote: (e) ->
  e.stopPropagation();
  e.nativeEvent.stopImmediatePropagation();
30
ответ дан Alexandr Lazarev 20 August 2018 в 20:29
поделиться
  • 1
    это не работает над последней реакционной версией (15.2.1) – Kepro 18 July 2016 в 19:07
  • 2
    Благодаря! Он работает для меня для React 15.2.0 – Xander 30 August 2016 в 12:24

попробуйте связать (это), чтобы ваш код выглядел ниже -

 <a className="upvotes" onClick={this.upvote.bind(this)}>upvote</a>

или если вы пишете в es6, реагируете на компонент в конструкторе, вы можете сделать это

constructor(props){
   super(props);
   this.upvote = this.upvote.bind(this);
}

upvote(e){   // function upvote
   e.preventDefault();
   return false

}
14
ответ дан deepak prakash 20 August 2018 в 20:29
поделиться
  • 1
    Это не имеет значения. Вы получаете upvotes, потому что люди имеют this в своем обработчике событий и имеют совершенно другую проблему. – Dimitar 8 February 2018 в 18:38

У меня были некоторые проблемы с привязными тегами и preventDefault в прошлом, и я всегда забываю, что я делаю неправильно, поэтому вот что я понял.

У меня часто возникает проблема что я пытаюсь получить доступ к атрибутам компонента путем деструктурирования их непосредственно , как и с другими компонентами React. Это не сработает, страница перезагрузится, даже с помощью e.preventDefault():

function (e, { href }) {
  e.preventDefault();
  // Do something with href
}
...
<a href="/foobar" onClick={clickHndl}>Go to Foobar</a>

Кажется, что разрушение вызывает ошибку (Cannot read property 'href' of undefined), которая не отображается на консоли, возможно, из-за полная перезагрузка страницы. Поскольку функция ошибочна, preventDefault не вызывается. Если href равно #, ошибка отображается правильно, так как фактическая перезагрузка отсутствует.

Теперь я понимаю, что я могу получить доступ только к атрибутам в качестве аргумента второго обработчика для пользовательских компонентов React, а не для собственных HTML-тегов. Поэтому, конечно, чтобы получить доступ к атрибуту HTML-тега в событии, это будет следующим:

function (e) {
  e.preventDefault();
  const { href } = e.target;
  // Do something with href
}
...
<a href="/foobar" onClick={clickHndl}>Go to Foobar</a>

Надеюсь, это поможет другим людям, как я, озадаченным непонятными ошибками!

0
ответ дан DSav 20 August 2018 в 20:29
поделиться

Если вы используете React Router, я бы предложил заглянуть в библиотеку реакции-router-bootstrap, которая имеет удобный компонент LinkContainer. Этот компонент предотвращает перезагрузку страницы по умолчанию, поэтому вам не нужно иметь дело с событием.

В вашем случае это может выглядеть примерно так:

import { LinkContainer } from 'react-router-bootstrap';

<LinkContainer to={givePathHere}>
    <span className="upvotes" onClick={this.upvote}>upvote</span>
</LinkContainer>
0
ответ дан iggirex 20 August 2018 в 20:29
поделиться

Полная версия решения будет обертывать метод upvotes внутри onClick, передавая e и используя native e.preventDefault ();

upvotes(e){
    e.preventDefault();
    //do something...
}

render(){
    return (<a type="simpleQuery" onClick={(e) => {this.upvotes(e)}}>
      upvote
    </a>);
{
26
ответ дан Roman 20 August 2018 в 20:29
поделиться
  • 1
    Должен быть принятый ответ. – Max Favilli 19 November 2017 в 23:52
  • 2
    Да, это должен быть принятый ответ. – Vikas Prasad 29 November 2017 в 03:06
  • 3
    Спасибо, что это было очень чисто для моего случая использования. – Mike Ebert 7 March 2018 в 01:57
  • 4
    Есть ли разница между e.preventDefault (); находясь в начале или в конце функции? Где больше смысла размещаться? – Sartheris Stormhammer 31 July 2018 в 12:29
  • 5
    Я думаю, что лучше использовать его вначале – Roman 31 July 2018 в 16:48

Гист, который я нашел и работает для меня:

const DummyLink = ({onClick, children, props}) => (
    <a href="#" onClick={evt => {
        evt.preventDefault();
        onClick && onClick();
    }} {...props}>
        {children}
    </a>
);

Кредит для srph https://gist.github.com/srph/020b5c02dd489f30bfc59138b7c39b53

1
ответ дан TheFullResolution 20 August 2018 в 20:29
поделиться
  • 1
    Могу ли я предложить не использовать onClick в качестве переданного имени функции функции, но что-то вроде handleClick вместо этого? Это запутанно, другие менее опытные разработчики могут подумать, что это действительно связанное событие с компонентом, в то время как это не так. Кроме того, при этом вы создаете новую функцию каждый раз, когда компонент повторно отображает, даже если он получает те же реквизиты. Это считается плохой практикой. – elQueFaltaba 23 March 2017 в 10:43

Это связано с тем, что эти обработчики не сохраняют область видимости. Из документации для реагирования: реакция документации

Проверьте раздел «no autobinding». Вы должны написать обработчик: onClick = () => {}

0
ответ дан viktor 20 August 2018 в 20:29
поделиться

render: -> <a className="upvotes" onClick={(e) => {this.upvote(e); }}>upvote</a>

7
ответ дан xjinjin 20 August 2018 в 20:29
поделиться

Если вы используете флажок

<input 
    type='checkbox'
    onChange={this.checkboxHandler}
/>

stopPropagation и stopImmediatePropagation не будут работать.

Поскольку вы должны использовать onClick = {this.checkboxHandler}

0
ответ дан роман пономарев 20 August 2018 в 20:29
поделиться
0
ответ дан Fabien Sartori 31 October 2018 в 15:40
поделиться
0
ответ дан Iwnnay 31 October 2018 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: