首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >& Material :错误未定义

& Material :错误未定义
EN

Stack Overflow用户
提问于 2022-02-17 08:52:07
回答 1查看 1.4K关注 0票数 0

我使用v7和Material v5。我有一个简单的表单组件,如下所示。我已经将TextField标记为必需的,但是,当字段的值为空时,错误状态和辅助文本永远不会显示。errors.title的值总是未定义。

我在这里做错什么了?如何使React表单验证工作,即errors

代码语言:javascript
复制
import React from 'react';
import Grid from '@mui/material/Grid';
import TextField from '@mui/material/TextField';
import Button from '@mui/material/Button';
import { useForm, Controller } from 'react-hook-form';
import backEndApi from '../api/backEndApi';

const UserForm = function () {

  const { control, handleSubmit, formState: { errors }, getValues } = useForm();

  const onFormSubmit = (event) => {
    event.preventDefault();
    backEndApi.post(getValues());
  };

  return (
    <Grid container alignItems="center" justify="center" direction="column" paddingTop="10%">
      <form onSubmit={handleSubmit(onFormSubmit)}>
        <Grid container alignItems="center" justify="center" direction="column" spacing={5}>
          <Grid item>
            <Controller
              name="title"
              control={control}
              rules={{ required: true }}
              render={({ field }) => {
                return (
                  <TextField
                    {...field}
                    id="title"
                    label="Title"
                    required
                    error={errors.title}
                    helperText={errors.title && 'Title is required'}
                  />
                );
              }}
            />
          </Grid>
          <Grid item>
            <Button id="job-submit" color="primary" type="submit" variant="contained">
              Create Job
            </Button>
          </Grid>
        </Grid>
      </form>
    </Grid>
  );

};

export default UserForm;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 09:36:51

我认为rulesrequired of TextField有冲突。

我确认它起作用了。(https://codesandbox.io/s/practical-chebyshev-9twrle?file=/src/userForm.js)

代码语言:javascript
复制
<Controller
  name="title"
  control={control}
  rules={{ required: true }}
  render={({ field }) => {
    return (
      <TextField
        {...field}
        id="title"
        label="Title"
        error={Boolean(errors.title)}
        helperText={errors.title && "Title is required"}
      />
    );
  }}
/>

此外,对于这样简单的情况,您也不必使用Controller

示例:https://codesandbox.io/s/practical-chebyshev-9twrle?file=/src/userFormWithoutController.js

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71154955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档