Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

242
Visualizações
React + EmailJS me está enviando toneladas de correos electrónicos en el método onClick

Soy nuevo en el desarrollo web en general, pero estoy tratando de crear mi propia página de contacto en mi sitio web y tengo problemas. Estoy usando React, Gatsby y Emailjs. Tengo mi formulario configurado para que las entradas pasen al estado onChange. Luego tengo un botón de "enviar mensaje" que debería enviar un correo electrónico usando EmailJS usando los tokens y las variables de estado. Esto hace todo el trabajo y el correo electrónico se envía con éxito , pero está enviando docenas de correos electrónicos. Creo que lo que sucede es que llama a sendEmail cada vez que se establece el estado y el DOM se vuelve a representar, o básicamente una vez por cada carácter que se ingresa en los campos, pero no sé por qué.

Puntos de bonificación si puede ayudarme a descubrir por qué presionar el botón Enviar mensaje también me envía a una ruta 404 / # en mi sitio.

 import React from 'react' import emailjs from 'emailjs-com class Main extends React.Component { constructor(){ super() this.state = { fromName:'', message:'', fromEmail:'' } } render() { return ( <div ... > ... <article> ... <form method="post" action="#"> <div className="field half first"> <label htmlFor="name">Name</label> <input type="text" name="name" id="name" value={this.state.fromName} onChange={e => this.setState({fromName: e.target.value})}/> </div> <div className="field half"> <label htmlFor="email">Email</label> <input type="text" name="email" id="email" value={this.state.fromEmail} onChange={e => this.setState({fromEmail: e.target.value})}/> </div> <div className="field"> <label htmlFor="message">Message</label> <textarea name="message" id="message" rows="4" value={this.state.message} onChange={e => this.setState({message: e.target.value})} placeholder = "..."></textarea> </div> <ul className="actions"> <li> <input type="submit" value="Send Message" className="special" onClick={this.sendEmail()}/> </li> </ul> </form> </article> </div> ) } sendEmail() { const serviceId='...' const templateId='...' const userId='...' emailjs.send(serviceId, templateId, this.state, userId) } } export default Main
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El problema es que nunca siguió bien la documentación de emailjs y nunca evitó la acción del formulario predeterminado. De acuerdo con la documentación de emailjs, debería haber configurado la función onClick con la función de envío de correo electrónico (sin invocarla) en la etiqueta de apertura del formulario NO en su botón de envío. (pero el botón sigue siendo necesario para que pueda enviar la señal de que se debe enviar el formulario). También invocó la función sendEmail que es inapropiada y genera problemas. También debe agregar un evento como parámetro en su función sendEmail al crear esta función. Luego, dentro de la función sendEmail, llama a la función event.preventDefault() .

 import React from 'react' import emailjs from 'emailjs-com class Main extends React.Component { constructor(){ super() this.state = { fromName:'', message:'', fromEmail:'' } } render() { return ( <div> <article> <form method="post" onClick={this.sendEmail} action="#"> <div className="field half first"> <label htmlFor="name">Name</label> <input type="text" name="name" id="name" value={this.state.fromName} onChange={e => this.setState({fromName: e.target.value})}/> </div> <div className="field half"> <label htmlFor="email">Email</label> <input type="text" name="email" id="email" value={this.state.fromEmail} onChange={e => this.setState({fromEmail: e.target.value})}/> </div> <div className="field"> <label htmlFor="message">Message</label> <textarea name="message" id="message" rows="4" value={this.state.message} onChange={e => this.setState({message: e.target.value})} placeholder = "..."></textarea> </div> <ul className="actions"> <li> <input type="submit" value="Send Message" className="special"/> </li> </ul> </form> </article> </div> ) } sendEmail(event) { event.preventDefault(); const serviceId='...' const templateId='...' const userId='...' emailjs.send(serviceId, templateId, this.state, userId) .then((result) => { console.log(result.text); }, (error) => { console.log(error.text); }); } } export default Main
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda