标签: react-hook-form

如何解析 Zod 来识别字段是否为必填字段?

我想知道是否可以使用 Zod 来确定何时需要字段,以便我可以将此布尔值传递给输入,例如<input required={/* Use Zod to determine this value */} />。我问的主要原因是出于样式目的,例如*在需要该字段时显示。

const Component = () => {
  const schema = z.object({
    name: z.string(),
    address: z.string().optional(),
  });

  type FormValues = z.infer<typeof schema>;

  const {
    register,
    handleSubmit,
    formState: { errors },
  } = useForm<FormValues>({
    defaultValues: {
      name: '',
      address: undefined,
    },
    resolver: zodResolver(schema),
  });

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

  return (
    <form onSubmit={onSubmit}>
      <input
        {...register('name', {
          required: /* Use Zod to determine this value */,
        })} …
Run Code Online (Sandbox Code Playgroud)

react-hook-form zod

2
推荐指数
1
解决办法
2310
查看次数

Nextjs Shadcn 表单点击后未提交

我正在使用 shadcn 的react-hook-form,我已经设法导航文档以获取我需要的输入和选择,但我创建的 onSubmit 函数没有执行任何操作。

有谁知道为什么?

"use client";

import * as z from "zod";
import { SubmitHandler, useForm, UseFormRegister } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { Input } from "./ui/input";
import ErrorMessage from "./ErrorMessage";
import { Button } from "./ui/button";
import {
  Form,
  FormControl,
  FormDescription,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "./ui/Form";
import { Textarea } from "./ui/textarea";

import {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from "@/components/ui/select";
import toast from "react-hot-toast";

type ReminderFormSchemaType = z.infer<typeof …
Run Code Online (Sandbox Code Playgroud)

next.js react-hook-form zod radix-ui

2
推荐指数
1
解决办法
3902
查看次数

使用 React Hook Form 未显示验证错误

我正在使用React Hook Form以验证一些简单的输入:

import React from "react";
import useForm from "react-hook-form";

import "./App.css";

function App() {
  const { register, handleSubmit, errors } = useForm();
  const onSubmit = data => {
    console.log(data);
  };

  return (
    <div className="App">
      <header className="App-header">
        <form onSubmit={handleSubmit(onSubmit)}>
          <input
            className="mkn-input"
            name="firstName"
            placeholder="First name"
            ref={register({
              required: true,
              maxlength: 20,
              message: "invalid first name"
            })}
          />
          <span> {errors.firstName && errors.firstName.message}</span>

          <input
            placeholder="Last name"
            className="mkn-input"
            name="lastName"
            ref={register({
              pattern: /^[A-Za-z]+$/i,
              message: "Invalid last name"
            })}
          />
          {errors.lastName && <span> errors.lastName.message</span>} …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hook-form

1
推荐指数
1
解决办法
1万
查看次数

如何使用 react-hook-form 为 KeyboardDatePicker 设置条件默认值?

我有一个包含KeyboardDatePickerfrom的表单,当没有值传递给该字段的钩子时material UI,我希望它有一个空字符串值 ( "") 作为默认值useForm

到目前为止,这是我的实现:

日期选择器输入字段:

                <MuiPickersUtilsProvider utils={DateFnsUtils}>
                    <Controller
                        name="date"
                        control={control}
                        rules={{ required: true }}
                        defaultValue={getValues().date || ""}
                        as={
                            <KeyboardDatePicker
                                autoOk
                                inputVariant="outlined"
                                format="yyyy-MM-dd"
                                margin="normal"
                                id="date-picker-inline"
                                label="Date"
                                placeholder="yyyy-mm-dd"
                                required
                                error={!!errors.date}
                                helperText={errors.date && "Incorrect entry."}
                                onChange={() => {}}
                                value={() => {}}
                                KeyboardButtonProps={{
                                    "aria-label": "change date",
                                }}
                            />
                        }
                    />
                </MuiPickersUtilsProvider>
Run Code Online (Sandbox Code Playgroud)

这是我对表单的钩子:

const { handleSubmit, getValues, control, register, errors, setValue } = useForm<Project>({
    submitFocusError: false,
    mode: "onBlur",
    defaultValues: project,
});
Run Code Online (Sandbox Code Playgroud)

我正在使用 a projectbut project …

forms material-ui react-hooks react-hook-form

1
推荐指数
1
解决办法
5445
查看次数

在reactjs钩子中提交后如何重置表单

这是我第一次使用钩子我不知道如何在提交后清除输入字段,form.reset() 不起作用

import { useForm } from "react-hook-form";
import....

export default function AddUser() {
  const URL = "http://localhost:3000/AddUser";
  const { register, handleSubmit, errors } = useForm();

  const onSubmit = (data) => {
    if (data) {
      axios.post(URL, data);
    }
form.reset()
  };

Run Code Online (Sandbox Code Playgroud)

这是返回部分

  return (
      <form onSubmit={handleSubmit(onSubmit)} noValidate>
        <div className="container">
              <input type="text" name="name" placeholder="Name" ref={register({required: true})}/> 

              <input type="radio" name="gender" value="male" ref={register({ required: true })}/>:Male

              <input type="radio" name="gender" value="female" ref={register({ required: true })}/:Female
            <button type="submit" className="btn "> add</button>
        </div>
      </form>
  );
}
Run Code Online (Sandbox Code Playgroud)

提前致谢 …

javascript reactjs react-hooks react-hook-form

1
推荐指数
1
解决办法
4182
查看次数

如何在 onChange 上提交反应表单字段而不是使用 React-Hook-Form 库提交

我已经开始使用新的 React-Hook-form 库,并希望在 Change 而不是 Submit 上提交我的输入字段。另外,我计划使用 Lodash 的 debounce 来避免重新渲染

这是我迄今为止尝试过的:

import React, { useEffect } from "react";
import ReactDOM from "react-dom";
import { useForm } from "react-hook-form";

import "./styles.css";

export default function App() {
  const { register, handleSubmit, setValue } = useForm();
 

  useEffect(() => {
    register({ name: "firstName" }, { required: true });
  }, [register]);

  return (
    <form>
      <input
        name="firstName"
        onChange={(e) => {
          setValue("firstName", e.target.value);
          handleSubmit((data) => console.log("data", data));
        }}
      />
    </form>
  );
}

const rootElement = document.getElementById("root"); …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hook-form

1
推荐指数
3
解决办法
4594
查看次数

使用控制器的react-hook-form Material-ui(FormControlLabel + Checkbox)

要在react-hook-form中使用Material-ui,您应该使用<Controller和render方法而不是“as = {xy-control}”也不应该混合控制器和inputRef = {register}。单个控件也没有问题。但是Material-ui中有一个复合控件。“FormControlLabel + CheckBox”如何将这个控件集成到控制器中。我所有的尝试都失败了。

这就是它的工作原理,但我希望 FormControlLaben 包含在控制器中。有人有什么想法吗?

                 <Controller
                    name="password"
                    control={control}
                    defaultValue={""}
                    render={(props) => <TextField {...props}
                                                  variant="outlined"
                                                  margin="normal"
                                                  required
                                                  fullWidth
                                                  label="Password"
                                                  type="password"
                                                  id="password"
                                                  autoComplete="current-password"
                    />}
                />

                <FormControlLabel
                    control={
                        <Checkbox
                            inputRef={register}
                            name="remember"
                        />
                    }
                    label="remember"
                />


{/*That works, but it requires an OnChange. Why can't the controller bind it?*/}
                <FormControlLabel
                    control={
                        <Controller
                            name={"remember2"}
                            control={control}
                            render={(props) => (
                                <Checkbox
                                    {...props}
                                    onChange={(e) => props.onChange(e.target.checked)}

                                />
                            )}
                        />
                    }
                    label="remember"
                />
Run Code Online (Sandbox Code Playgroud)

typescript reactjs react-hook-form

1
推荐指数
1
解决办法
8845
查看次数

如何使用反应钩子形式在反应选择延迟一段时间后设置defaultValue

我正在使用带有react-hook-form库的react-select下拉菜单。我正在调用 api 来获取反应选择的默认值。最初,下拉列表无法预填充默认值。所以我找到了一个解决方法,当我从 api 获取数据时重新渲染整个 JSX。

<form onSubmit={handleSubmit(saveData)}>
{!countryValue && (
      <Controller
        name="country"
        control={control}
        render={({ onChange, value, ref }) => (
          <Select
            options={country}
            value={country.find((c) => c.value === value)}
            onChange={(val) => onChange(val.value)}
          />
        )}
        rules={{ required: true }}
      />
    )}
    {countryValue && (
      <Controller
        name="country"
        control={control}
        render={({ onChange, value, ref }) => (
          <Select
            options={country}
            value={country.find((c) => c.value === value)}
            onChange={(val) => onChange(val.value)}
            defaultValue={country.find((c) => c.value === countryValue)}
          />
        )}
        rules={{ required: true }}
      />
    )}
{errors.country && <div>Field is rquired</div>} …
Run Code Online (Sandbox Code Playgroud)

reactjs react-select react-hook-form

1
推荐指数
1
解决办法
2万
查看次数

反应挂钩形式错误:transformToNestObject 不是函数

我想使用 Material-UI 单选按钮,react-hook-form更新后验证抛出以下错误:

transformToNestObject is not a function
Run Code Online (Sandbox Code Playgroud)

包装Controller不正确吗?

沙盒示例

  <Controller
    render={({ field, fieldState }) => (
      <RadioGroup {...field} aria-label="option">
        <FormControlLabel
          value="A"
          control={<Radio size="small" color="primary" />}
          label="A"
        />
        <FormControlLabel
          value="B"
          control={<Radio size="small" color="primary" />}
          label="B"
        />
      </RadioGroup>
    )}
    name="option"
    control={control}
  />
Run Code Online (Sandbox Code Playgroud)

reactjs yup react-hook-form

1
推荐指数
1
解决办法
1080
查看次数

React Hook 表单动态 Require

大家好,

我使用反应钩子形式,我想在一个文本输入上动态设置所需的内容。我有一个 useState 来跟踪交付方法和更新该状态的单选按钮。然后所需的文本输入应该动态地基于该状态。因此,如果送货方式是“送货”,我们需要您的地址,如果是“取货”,我们不需要您的地址。我希望这是有道理的。

在下面的代码中,显示/隐藏功能按预期工作,但动态要求却不然。

const [ delivery, setDelivery ] = useState(false);

<InfoBlock>
  <strong>Delivery Method</strong>
  <RadioGroup>
    <RadioBlock>
      <input type="radio" id="pickup" name="pickup" {...register("deliveryMethod", {required: true})} 
        value="pickup" onClick={() => setDelivery(false)} />
      <h5>Pickup</h5>
    </RadioBlock>                
    <RadioBlock>
      <input type="radio" id="deliver" name="delivery" {...register("deliveryMethod", {required: true})}  
        value="delivery" onClick={() => setDelivery(true)} />
      <h5>Delivery</h5>
    </RadioBlock>                   
  </RadioGroup>
</InfoBlock>
<ErrorMsg>
  {errors.deliveryMethod && errors.deliveryMethod.type === 'required' && "Please select delivery method"}
</ErrorMsg>

{delivery ? 
  <div>
    <InfoBlock>
      <strong>Address</strong>
      **<input type="text" id="address" name="address" 
        {...register("address", {required: delivery })}  />**
    </InfoBlock>
    <ErrorMsg>
      {errors.address && errors.address.type === …
Run Code Online (Sandbox Code Playgroud)

validation react-hook-form

1
推荐指数
1
解决办法
7465
查看次数