Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获类型错误:无法读取属性';匹配';在反应中未定义的_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 未捕获类型错误:无法读取属性';匹配';在反应中未定义的

Javascript 未捕获类型错误:无法读取属性';匹配';在反应中未定义的,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我想做一个简单的提交表格。我相信我的邮件格式的json是正确的。使用mailformat中的json,我试图检查提交的电子邮件是否有效。但是由于某些原因,react似乎无法识别match()方法。我得到一个错误,声明“无法读取未定义的属性‘match’”。我猜测修复涉及异步编程,但我没有足够的技能来提出修复。我用的是react钩子和state function Form({submit, setSubmit, text, setText}) { let emailArray = [];

我想做一个简单的提交表格。我相信我的邮件格式的json是正确的。使用mailformat中的json,我试图检查提交的电子邮件是否有效。但是由于某些原因,react似乎无法识别match()方法。我得到一个错误,声明“无法读取未定义的属性‘match’”。我猜测修复涉及异步编程,但我没有足够的技能来提出修复。我用的是react钩子和state

function Form({submit, setSubmit, text, setText}) {
    let emailArray = [];

    //handlers. Need for submit button and input for text
    const setTextHandler = (e) => { 
        // console.log(e.target.value)
        
        setText(e.target.value);
    };

    const setSubmitHandler = (e) => {
        let mailformat = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
        e.preventDefault();

        setSubmit(text);
        console.log(text)

        if(text.value.match(mailformat)) {
            console.log("it works")
            emailArray.push(text);
            return true
        } else if (!text.value.match(mailformat)) {
            console.log("FAIL");
            return false
        }
        
        console.log(emailArray[0])
        console.log(emailArray)
        setText("");
    }

根据最后一行和setTextHandler,这两个setText函数都将文本值设置为字符串,因此只需更改这一行即可:

if(text.match(mailformat)) {
  // your code
} else if (!text.match(mailformat)) {
  // your code
}

关于你的“邮件格式”的一个说明:现在已经不是1992年了,现在的有效电子邮件基本上是“里面有并且只有一个
@
吗?酷,这是一个有效的电子邮件地址”你必须使用
text.match
,因为你直接将输入存储在
e.target.value
中。您可以使用
RegExp.test
方法来代替匹配