反应钩形式的 onChange 输入

时间:2021-06-10 08:27:54

标签: javascript reactjs forms react-hook-form

我正在使用 React 和 react-hook-form 库构建 web 应用程序。我想创建表单,其中某些字段的更改会触发某些事件。所以我需要通过自定义 onChange

但是,从 v7.0 开始我不能使用 onChange,因为 register 使用它自己的 onChange

import React from 'react'
import { useForm } from 'react-hook-form'

const MyForm = () => {

  const form = useForm()
  const onChangeFirst = value => console.log('First:', value)
  const onChangeSecond = value => console.log('Second:', value)

  return (
    <form onSubmit={form.handleSubmit(vals => null)}>
      <input {...register('first')} />
      <input {...register('second')} />
    </form> 
  )

}

如何将 onChangeFirst 传递给 first 输入并将 onChangeFirst 传递给 second 输入?

1 个答案:

答案 0 :(得分:2)

有两种方法可以在输入更改时触发 onChange

1/ 带有 Controller 组件(推荐)

const onChangeFirst = value => console.log('First:', value)

<Controller
  control={control}
  name="first"
  render={({field}) => (
    <input {...field} onChange={e => {
      onChangeFirst(field.value);
      field.onChange(e);
    }} />
  )}
/>

2/ 带有 useWatch 钩子

 const second = useWatch({
    control,
    name: 'second'
 });

 useEffect(() => {
   console.log('Second:', second)
 }, [second])