Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 handleSubmit未提交formik表格_Javascript_Reactjs_Formik - Fatal编程技术网

Javascript handleSubmit未提交formik表格

Javascript handleSubmit未提交formik表格,javascript,reactjs,formik,Javascript,Reactjs,Formik,我已经为注册页面设置了一个formik表单,但是当我单击submit按钮时,它没有提交表单。另外,由于我使用的是formik表单,所以有一些来自formik的道具和来自父组件的道具。我们可以在一个组件中使用来自两个不同组件的两个道具吗 注册组件 import React, { useState } from "react"; import { Formik } from "formik"; import TextField from "@material-ui/core/TextField";

我已经为注册页面设置了一个formik表单,但是当我单击submit按钮时,它没有提交表单。另外,由于我使用的是formik表单,所以有一些来自formik的道具和来自父组件的道具。我们可以在一个组件中使用来自两个不同组件的两个道具吗

注册组件

import React, { useState } from "react";
import { Formik } from "formik";
import TextField from "@material-ui/core/TextField";
import * as Yup from "yup";
import Avatar from "@material-ui/core/Avatar";
import Button from "@material-ui/core/Button";
import CssBaseline from "@material-ui/core/CssBaseline";
import Link from "@material-ui/core/Link";
import Grid from "@material-ui/core/Grid";
import Box from "@material-ui/core/Box";
import LockOutlinedIcon from "@material-ui/icons/LockOutlined";
import Typography from "@material-ui/core/Typography";
import { makeStyles } from "@material-ui/core/styles";
import Container from "@material-ui/core/Container";

function Copyright() {
    return (
      <Typography variant="body2" color="textSecondary" align="center">
        <Link color="inherit" href="sad">
          New
        </Link>{" "}
        {new Date().getFullYear()}
        {"."}
      </Typography>
    );
  }

const useStyles = makeStyles(theme => ({
    paper: {
      marginTop: theme.spacing(8),
      display: "flex",
      flexDirection: "column",
      alignItems: "center"
    },
    avatar: {
      margin: theme.spacing(1),
      backgroundColor: theme.palette.secondary.main
    },
    form: {
      width: "100%",
      marginTop: theme.spacing(1)
    },
    submit: {
      margin: theme.spacing(3, 0, 2)
    }
  }));

  const SupFirst = props => {
    const classes = useStyles();
    const [loginError, setLoginError] = useState("");
    const [changed, setChanged] = useState(false);
    const {setSignup, signup, email, setEmail}=props;
    const handleSubmit = async (values, { setSubmitting }) => {
        const {email} =values;
        setEmail(values);
        var body = {
          email: email
        };
        console.log(body);
        const options = {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            Accept: "application/json"
          },
          body: JSON.stringify(body)
        };
        const url = "http://localhost:8000/api/emailcheck";
        try {
          const response = await fetch(url, options);
          const text = await response.text();
          setSubmitting(false);
          setChanged(false);
          console.log(text);
          if (text === "does not exist") {
            setSignup(true);
          } else if (text === "exists") {
            props.history.push(`/`);

          } else {
            setLoginError("Email is invalid");
          }
        } catch (error) {
          console.error(error);
        }
      };
return (
    <Formik
      initialValues={{email:""}}
      onSubmit={handleSubmit}
      //********Using Yup for validation********/

      validationSchema={Yup.object().shape({
        email: Yup.string()
          .email()
          .required("Required"),
      })}
    >
      {props => {
        const {
          values,
          touched,
          errors,
          isSubmitting,
          handleChange,
          handleBlur,
          handleSubmit
        } = props;
        return (
          <>
            <Container component="main" maxWidth="xs">
              <CssBaseline />
              <div className={classes.paper}>
                <Avatar className={classes.avatar}>
                  <LockOutlinedIcon />
                </Avatar>
                <Typography component="h1" variant="h5">
                  Sign in
                </Typography>
                <form
                  className={classes.form}
                  onSubmit={handleSubmit}
                  noValidate
                >
                  <TextField
                    variant="outlined"
                    margin="normal"
                    required
                    fullWidth
                    id="email"
                    value={values.email}
                    label="Email Address"
                    name="email"
                    autoComplete="email"
                    onChange={e=>{setChanged(true);handleChange(e)}}
                    onBlur={handleBlur}
                    className={errors.email && touched.email && "error"}
                  />
                  {errors.email && touched.email && (
                    <div className="input-feedback" style={{ color: "red" }}>{errors.email}</div>
                  )}
{!changed && loginError && (
                    <div style={{ color: "red" }}>
                      <span>{loginError}</span>
                    </div>
                  )}

                  <Button
                    type="submit"
                    fullWidth
                    variant="contained"
                    color="primary"
                    className={classes.submit}
                    disabled={isSubmitting}
                  >
            Next
          </Button>
          <Grid container justify="flex-end">
            <Grid item>
              <Link href="/" variant="body2">
                Already have an account? Sign in
              </Link>
            </Grid>
          </Grid>
        </form>
      </div>
      <Box mt={5}>
        <Copyright />
      </Box>
    </Container>
          </>
        );
      }}
    </Formik>
  );
};

export default SupFirst;
import React,{useState}来自“React”;
从“Formik”导入{Formik};
从“@material ui/core/TextField”导入TextField;
从“Yup”导入*作为Yup;
从“@material ui/core/Avatar”导入化身;
从“@物料界面/核心/按钮”导入按钮;
从“@material ui/core/CssBaseline”导入CssBaseline;
从“@material ui/core/Link”导入链接;
从“@material ui/core/Grid”导入网格;
从“@material ui/core/Box”导入框;
从“@material ui/icons/LockOutlined”导入LockOutlinedIcon;
从“@material ui/core/Typography”导入排版;
从“@material ui/core/styles”导入{makeStyles}”;
从“@material ui/core/Container”导入容器;
函数版权(){
返回(
新的
{" "}
{新日期().getFullYear()}
{"."}
);
}
const useStyles=makeStyles(主题=>({
论文:{
marginTop:主题。间距(8),
显示:“flex”,
flexDirection:“列”,
对齐项目:“中心”
},
化身:{
边距:主题。间距(1),
背景色:theme.palete.secondary.main
},
表格:{
宽度:“100%”,
marginTop:主题。间距(1)
},
提交:{
边距:主题。间距(3,0,2)
}
}));
const SupFirst=props=>{
const classes=useStyles();
常量[loginError,setLoginError]=useState(“”);
const[changed,setChanged]=useState(false);
const{setSignup,signup,email,setEmail}=props;
const handleSubmit=async(值,{setSubmitting})=>{
const{email}=值;
设置电子邮件(值);
变量体={
电邮:电邮
};
控制台日志(主体);
常量选项={
方法:“张贴”,
标题:{
“内容类型”:“应用程序/json”,
接受:“应用程序/json”
},
body:JSON.stringify(body)
};
常量url=”http://localhost:8000/api/emailcheck";
试一试{
const response=等待获取(url、选项);
const text=等待响应。text();
设置提交(假);
setChanged(假);
console.log(文本);
如果(文本==“不存在”){
设置信号(真);
}else if(文本==“存在”){
props.history.push(`/`);
}否则{
setLoginError(“电子邮件无效”);
}
}捕获(错误){
控制台错误(error);
}
};
返回(
{props=>{
常数{
价值观
感动的,
错误,
提交,
handleChange,
车把,
手推
}=道具;
返回(
登录
{setchange(true);handleChange(e)}
onBlur={handleBlur}
className={errors.email&&touch.email&&error}
/>
{errors.email&&touch.email&&(
{errors.email}
)}
{!已更改&&login错误&&(
{loginError}
)}
下一个
已经有帐户了吗?请登录
);
}}
);
};
首先导出默认值;

我是如何处理类似问题的。将您的按钮从使用type=“submit”更改为type=“button”,并添加类似于type=“button”onClick={submitForm}的onClick。submitForm是formik提供的一种道具,您可以将其包含在返回道具中{值、错误、触摸、handleChange、handleBlur、submitForm、isSubmitting完成后,也不要忘记像这样添加onSubmit属性。当表单验证通过时,这将运行提交处理程序