当前位置: 首页 > 知识库问答 >
问题:

React.js:e.preventDefault不是一个函数

段干玺
2023-03-14

在我的项目中,我创建了一个负责登录的组件。它返回一个表单并包含一个名为onSubmit的验证方法。当前该方法如下所示:

import { useState } from "react"

function Login({ onLogin }) {
    const [name, setName] = useState("")
    const [password, setPassword] = useState("")

    function onSubmit(e) {
        e.preventDefault()

        if (!name && !password) return alert("Please enter a username and a password!")
        if (!name) return alert("Please enter a username!")
        if (!password) return alert("Please enter a password!")

        onLogin({ name, password })

        setName("")
        setPassword("")
    }
}

我想让整个事情看起来更好,并用两个三元运算符和一个if语句切换了3个if语句:

import { useState } from "react"

function Login({ onLogin }) {
    const [name, setName] = useState("")
    const [password, setPassword] = useState("")
    let missingData

    function onSubmit(e) {
        e.preventDefault()

        (!name && !password) ? missingData = "username and a password" : !name ? missingData = 
"username" : missingData = "password"
        if (!password || !name) return alert(`Please enter a ${missingData}!`)

        onLogin({ name, password })

        setName("")
        setPassword("")
    }
}

但是,只要我尝试此操作,就会出现以下错误:

TypeError:e.preventDefault(…)不是函数

我不知道在这里使用三元是如何影响事件对象的。特别是因为我在寄存器组件中以类似的方式完成了它,并且没有发生错误。

组件的return语句(包括表单)如下所示:

return (
    <>
        <h3>Login</h3>
        <form onSubmit={onSubmit}>
            <label>Username</label>
            <input
                type="text"
                placeholder="Username"
                value={name}
                onChange={(e) => setName(e.target.value)}
            />

            <label>Password</label>
            <input
                type="password"
                placeholder="Password"
                value={password}
                onChange={(e) => setPassword(e.target.value)}
            />

            <input type="submit" value="Login" />
        </form>
    </>
)

共有1个答案

岳和泽
2023-03-14

由于您没有使用分号,JavaScript很难确定包含e.preventDefault()的行是否已经结束,并且正在将其与下一行合并。

可以通过在以下两个位置之一添加分号来解决此问题:

function onSubmit(e) {
  e.preventDefault();
  ...

function onSubmit(e) {
  e.preventDefault()

  ;(!name && !password) ? missingData = "username and a password" : !name ? missingData = 
"username" : missingData = "password"
  ...

您可以在这里的“用不明显是新语句的代码启动一行”下找到进一步的解释:https://www.learnbasicjs.com/do-i-need-semicolons-in-javascript/

 类似资料:
  • 在我的项目中,我创建了一个负责登录的组件。它返回一个表单,并包含一个名为的验证方法。目前的方法如下: 我想让整件事看起来更好,并用2个三元运算符和1个if语句切换了3个if语句: 但是,只要我尝试此操作,就会出现以下错误: e.prevent默认值(...)不是函数 我不知道在这里使用三元是如何影响事件对象的。特别是因为我在寄存器组件中以类似的方式完成了它,并且没有发生错误。 组件的返回语句,包括

  • 问题内容: 我试图编写登录到网站的节点功能,但无法使其正常工作。我试图等待页面使用加载功能 这是我到目前为止的内容: 当我运行该函数时,我收到错误消息。这是怎么回事,我想念什么? 问题答案: 为了与其他硒语言绑定的一致性, 并已被弃用。 如果您使用,则应尝试使用代替来确定元素是否存在,如下所示: 或者,如果您要等到欲望元素出现,则应尝试使用以下方法:

  • 我试图使用rxjs输入自动完成的目的,但我一直得到这些错误TypeError:terms.debounce时间不是一个函数,即使我设置这些导入'rxjs/操作员/DebounceTime'; 我称之为的函数是:

  • 在Angular2中尝试一个代码,它的HTML正在运行,但Angular代码没有执行,它表示我从HTML传递的值不是函数。请帮忙! HTML:app.html - 我正在尝试显示学生的详细信息。我在angular app.component.ts文件中有一个项目列表,我在HTML页面上调用它,工作正常。但是当我将单击事件的值传递给 app.component.ts 时,它会给出错误并在控制台上显示

  • 问题内容: 我试图要求一个文件,然后将其传递给var。我正在按照本教程创建身份验证系统。编写server.js文件并尝试编译后,出现bson错误,因此我更改了需要它的发行版本的猫鼬代码。 这是我的代码和错误: server.js 错误 我已经读到这通常意味着requireJS无法正确加载,但我不知道为什么或如何修复它。 根据评论进行编辑: 根据要求,这是 问题答案: 我认为这意味着在您的模块中未将

  • 我试图在代码中使用以下服务: 问题是,在运行时,它会抱怨: 我已经定义res的数据类型为响应,但仍然抱怨 如果我用订阅替换地图,它工作正常: