Javascript 反应钩形式不';使用物料界面按钮时不工作

Javascript 反应钩形式不';使用物料界面按钮时不工作,javascript,reactjs,Javascript,Reactjs,这是我没有物料界面按钮的代码: const {register, handleSubmit} = useForm(); const onSubmit = (data) => { console.log(data) } const handleChange = (e) => { console.log(e.target.files) } ... <form id="myFile" onSubmit={handleSubmit(onSubm

这是我没有物料界面按钮的代码:

const {register, handleSubmit} = useForm();

const onSubmit = (data) => {
    console.log(data)
}
const handleChange = (e) => {
    console.log(e.target.files)
}

...

<form id="myFile" onSubmit={handleSubmit(onSubmit)}>
    <input id="file1" type="file" {...register("file1")} onChange={handleChange}/>
    <input type="submit"/>
</form>
const{register,handleSubmit}=useForm();
const onSubmit=(数据)=>{
console.log(数据)
}
常数handleChange=(e)=>{
console.log(e.target.files)
}
...
这对我来说是可行的,但当我尝试添加材质UI按钮而不是输入时,我会得到onChange值,但当我单击submit时。我没有任何表单数据

const {register, handleSubmit} = useForm();

const onSubmit = (data) => {
    console.log(data)
}
const handleChange = (e) => {
    console.log(e.target.files)
}

...

<form id="myFile" onSubmit={handleSubmit(onSubmit)}>
    <input id="file1" type="file" {...register("file1")} onChange={handleChange} 
    style={{display:"none"}}/>
    <label htmlFor="file1">
        <Button variant="contained" component="span">
             Choose file
        </Button>
    </label>
    <input type="submit"/>
</form>
const{register,handleSubmit}=useForm();
const onSubmit=(数据)=>{
console.log(数据)
}
常数handleChange=(e)=>{
console.log(e.target.files)
}
...
选择文件

这里有什么解决方法吗?

您可以尝试以下方法:

import React, { useState } from 'react';
import { Button, TextField } from '@material-ui/core';
import useForm from 'react-hook-form';
import { object, string } from 'yup';

const Form: React.FC = () => {
  const schema = object().shape({
    username: string().required('username required'),
    password: string().required('password required'),
  });
  const { register, handleSubmit, errors } = useForm({ validationSchema: schema });

  const onSubmit = (data: any) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <TextField
        name="username"
        error={!!errors.username}
        label="Username"
        helperText={errors.username ? errors.username.message : ''}
        type="email"
        inputRef={register}
        fullWidth
      />
      <TextField
        name="password"
        error={!!errors.password}
        label="Password"
        inputRef={register}
        helperText={errors.password ? errors.password.message : ''}
        type="password"
        fullWidth
      />

      <Button
        color="secondary"
        type="submit"
        variant="contained"
        fullWidth
      >
        Submit
      </Button>
    </form>
  );
};
import React,{useState}来自“React”;
从“@material ui/core”导入{按钮,TextField};
从“react hook form”导入useForm;
从'yup'导入{object,string};
常数形式:React.FC=()=>{
const schema=object().shape({
用户名:string().required('username required'),
密码:string().required('password required'),
});
const{register,handleSubmit,errors}=useForm({validationSchema:schema});
const onSubmit=(数据:any)=>{
控制台日志(数据);
};
返回(
提交
);
};

参考:

您忘记提及按钮的类型了

对于默认材质,ui按钮类型为

type="button"

你应该提到

type="submit"
你喜欢这个吗

<Button type="submit" variant="contained" component="span">
             Choose file
</Button>

选择文件