在react-hook-form控制器中发生错误时,可以通过使用HTML的ref
属性和focus()
方法来聚焦到错误的表单字段上。具体步骤如下:
import React from 'react';
import { useForm } from 'react-hook-form';
function MyForm() {
const { register, handleSubmit, errors } = useForm();
const onSubmit = (data) => {
// 表单提交逻辑
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
{/* 表单字段 */}
<input name="username" ref={register({ required: true })} />
{errors.username && <span>用户名不能为空</span>}
{/* 其他表单字段 */}
{/* 提交按钮 */}
<button type="submit">提交</button>
</form>
);
}
ref
属性和focus()
方法来聚焦到错误的表单字段上。为了实现这个目的,我们可以使用useEffect
钩子来监听错误变化,然后在发生错误时触发聚焦操作。修改代码如下:import React, { useEffect, useRef } from 'react';
import { useForm } from 'react-hook-form';
function MyForm() {
const { register, handleSubmit, errors } = useForm();
const errorRef = useRef(null); // 创建一个ref用于存储错误表单字段的引用
useEffect(() => {
if (errors.username) {
// 当发生错误时,通过ref.current.focus()聚焦到错误表单字段
errorRef.current.focus();
}
}, [errors]);
const onSubmit = (data) => {
// 表单提交逻辑
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
{/* 表单字段 */}
<input name="username" ref={(e) => {
register(e, { required: true });
errorRef.current = e; // 将错误表单字段的引用存储到ref.current中
}} />
{errors.username && <span>用户名不能为空</span>}
{/* 其他表单字段 */}
{/* 提交按钮 */}
<button type="submit">提交</button>
</form>
);
}
在上述代码中,我们创建了一个errorRef
来存储错误表单字段的引用。在注册表单字段时,我们使用了一个回调函数来同时调用register
函数和将错误表单字段的引用存储到errorRef.current
中。然后,我们在useEffect
钩子中监听errors
对象的变化,一旦发现errors.username
存在,就调用errorRef.current.focus()
将焦点聚焦到错误表单字段上。
至于推荐的腾讯云相关产品和产品介绍链接地址,根据提供的问答内容,并不需要涉及到这部分信息。
领取专属 10元无门槛券
手把手带您无忧上云