javascript - 表单提交时在 React JS 中显示成功或错误消息

标签 javascript reactjs

我试图在提交表单时显示错误或成功消息,具体取决于它是否有效。我最初只使用“警报”,但项目要求消息显示在表单下方。我在 Gulp 中收到“未定义成功和错误”的错误。但它只提到未定义的花括号内的成功和错误(在代码中)。我试着用谷歌搜索这个并在这里检查类似的问题,但没有发现任何问题。到目前为止,这是我的代码:

import React, { useState } from "react";
import { ReactComponent as Decoration } from "../assets/Decoration.svg";
import Instagram from "../assets/Instagram.svg";
import Facebook from "../assets/Facebook.svg";
import { db } from "../firebase";

function Kontakt() {
    const [name, setName] = useState("");
    const [email, setEmail] = useState("");
    const [msg, setMsg] = useState("");

    const handleSubmit = (e) => {
        const success = '';
        const error = '';

        e.preventDefault();

        db.collection('contacts').add({
            name: name,
            email: email,
            msg: msg
        })
            .then(() => {
                return success;
            })
            .catch(() => {
                return error;
            });

        setName("");
        setEmail("");
        setMsg("");
    }

    return (
        <div id="contact" className="contact-container">
            <div className="contact-box">
                <p>Skontaktuj się z nami</p>
                <Decoration />
                <form className="contact-form" onSubmit={handleSubmit}>
                    <div className="contact-form__labels">
                        <label>
                            <p>Wpisz swoje imię</p>
                            <input name="name" required placeholder="Ania/Krzysztof" className="contact-name" value={name} onChange={(e) => setName(e.target.value)} />
                        </label>
                        <label>
                            <p>Wpisz swój email</p>
                            <input type="email" required placeholder="abc@xyz" className="contact-email" value={email} onChange={(e) => setEmail(e.target.value)} />
                        </label>
                    </div>

                    <label className="contact-text-label">
                        <p>Wpisz swoją wiadomość</p>
                        <textarea
                            placeholder="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
                            className="contact-message" minlength="120" value={msg} required onChange={(e) => setMsg(e.target.value)}>
                        </textarea>
                    </label>
                    {success && <p>"Twoja wiadomość została wysłana."</p>}
                    {error && <p>"Wysyłanie wiadomości nie powdioło się.  Spróbuj jeszcze raz."</p>}
                    <button type="submit" className="contact-btn">Wyślij</button>
                </form>
            </div>
            <div className="footer-container">

            </div>
            <p id="footer">Copyright by Coders Lab</p>
            <a href="https://facebook.com">
                <img id="fb" src={Facebook} alt="Facebook" />
            </a>
            <a href="https://instagram.com">
                <img id="insta" src={Instagram} alt="Instagram" />
            </a>

        </div>

    )
}


export default Kontakt; 

我得到的错误:

src\components\Kontakt.js
  Line 59:7:  'success' is not defined  no-undef
  Line 60:7:  'error' is not defined    no-undef

我错过了什么?

最佳答案

此处抛出编译的主要问题是 successerror 常量在 handleSubmit 闭包中。您正试图在此闭包之外访问它们,这就是它们未定义的原因。

另一个问题是这个想法是错误的。您已经定义了两个具有相同值的常量,并且出于某种原因您从 db.collection().add promise 回调中返回了它们,这些回调没有在任何地方使用。

function Kontakt() {
  const [status, setStatus] = useState(undefined);

  const handleSubmit = (e) => {
    db.collection('contacts')
      .add({
        name: name,
        email: email,
        msg: msg,
      })
      .then(() => {
        setStatus({ type: 'success' });
      })
      .catch((error) => {
        setStatus({ type: 'error', error });
      });
  };

  return (
    <>
      {status?.type === 'success' && <p>"Twoja wiadomość została wysłana."</p>}
      {status?.type === 'error' && (
        <p>"Wysyłanie wiadomości nie powdioło się. Spróbuj jeszcze raz."</p>
      )}
    </>
  );
}

关于javascript - 表单提交时在 React JS 中显示成功或错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66387199/

相关文章:

javascript - react js : mouse cursor always at end of input element when edit text

javascript - 按键时的幻灯片无法正常工作

javascript - 创建的 DIV 内的链接导致悬停时删除了 div

javascript - 使用一个 http 请求下载文件,无需压缩

javascript - TodoItems 不会出现在使用 React 和 Firebase 的 UI 中

javascript - 如何在 Node.js 中根据 UserId 获取匹配的聚合

reactjs - 为什么自定义钩子(Hook)返回结果两次

javascript - 禁用模态后面元素的所有按键

javascript - 根据变量值动态添加类到表中

reactjs - 如何在不使用路由器的情况下向 React 添加页面转换?