简体   繁体   中英

Material UI custom TextField dosn't work with Yup

I'm trying to use my custom TextField in my RegisterForm with Yup but he's dosnt work. All time I have a message "⚠ Champ obligatoire." after click on Submit I don't understand why but is good with a simple input.

在此处输入图像描述

RegisterPage.js

import React, { useRef } from "react";
import { useForm } from "react-hook-form";
import Button from "../../lib/Button";
import TextField from "../../lib/TextField";
import * as yup from "yup";

const SignupSchema = yup.object().shape({
  firstName: yup.string().required("⚠ Champ obligatoire."),
});

export default function Home() {
  const { register, handleSubmit, errors, watch } = useForm({
    validationSchema: SignupSchema,
  });

  const onSubmit = (data) => console.log(data);
  console.log(errors);

  return (
    <div style={styles.inputForm}>
      <p>Inscription</p>

      <form style={{ marginTop: "40%" }} onSubmit={handleSubmit(onSubmit)}>
        <label style={styles.label} htmlFor="firstName">
          Prénom
        </label>
        <TextField
          style={styles.input}
          name="firstName"
          placeholder="Toto"
          type="text"
          ref={register}
        />
        <br />
        {errors.firstName && (
          <p style={styles.error}>{errors.firstName.message}</p>
        )}
        <br />

        <Button
          style={{ marginTop: 10 }}
          type="submit"
          onClick={handleSubmit(onSubmit)}>
          Termine ton incription
        </Button>
      </form>
    </div>
  );
}

My CustomTextField

CustomTextfield.js

import React from "react";
import PropTypes from "prop-types";
import TextField from "@material-ui/core/TextField";

function CustomField({ InputLabelProps = {}, ...props }) {
  return (
    <TextField
      InputLabelProps={{ shrink: true, ...InputLabelProps }}
      {...props}
    />
  );
}

CustomField.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default CustomField;

Thanks in advance!

You need to use inputRef instead of ref on TextField . ref will be applied to the outermost element which will be the div rendered by FormControl ; and this won't be any help with the yup integration. inputRef will forward the ref to the input element.

        <TextField
          style={styles.input}
          name="firstName"
          placeholder="Toto"
          type="text"
          inputRef={register}
        />

编辑材质 UI - 自定义文本字段(组合)

Related documentation: https://material-ui.com/api/text-field/#props

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM