setValue (name: string, value: unknown, config?: Object) => void
此函数允许您动态设置 已注册字段的值,并具有验证和更新表单状态的选项。 同时,它试图避免不必要的重新渲染。
道具
名称 | 类型 | 描述 | |
---|---|---|---|
name | string |
| |
value | unknown | 该字段的值。 此参数是必需的,不能为 | |
选项 | shouldValidate | boolean |
|
| shouldDirty | boolean |
|
| shouldTouch | boolean | 是否将输入本身设置为已触摸。
|
规则
只有以下情况才会触发重新渲染
当错误由值更新触发或纠正时
当setValue导致状态更新时,例如脏和已触摸。
建议以字段名称为目标,而不是将第二个参数设为嵌套对象。
setValue('yourDetails.firstName', 'value'); // ✅ performantsetValue('yourDetails', { firstName: 'value' }); // less performantregister('nestedValue', { value: { test: 'data' } }); // register a nested value inputsetValue('nestedValue.test', 'updatedData'); // ❌ failed to find the relevant fieldsetValue('nestedValue', { test: 'updatedData' } ); // ✅ setValue find input and update建议在调用
setValue
之前注册输入的名称。 为了更新整个字段数组,请确保首先执行useFieldArray
钩子。重要: 使用
replace
来自useFieldArray
,使用setValue
更新整个字段数组将在下一个主要版本中删除。// you can update an entire Field Array,setValue('fieldArray', [{ test: '1' }, { test: '2' }]); // ✅// you can setValue to a unregistered inputsetValue('notRegisteredInput', 'value'); // ✅ prefer to be registered// the following will register a single input (without register invoked)setValue('resultSingleNestedField', { test: '1', test2: '2' }); // 🤔// with registered inputs, the setValue will update both inputs correctly.register('notRegisteredInput.test', '1')register('notRegisteredInput.test2', '2')setValue('notRegisteredInput', { test: '1', test2: '2' }); // ✅ sugar syntax to setValue twice
示例
import { useForm } from "react-hook-form";const App = () => {const { register, setValue } = useForm();return (<form><input {...register("firstName")} /><button type="button" onClick={() => setValue("firstName", "Bill")}>setValue</button><buttontype="button"onClick={() =>setValue("lastName", "firstName", {shouldValidate: true,shouldDirty: true})}>setValue options</button></form>);};
视频
以下视频教程演示了setValue
API 详细介绍。
感谢您的支持
如果您发现 React Hook Form 在您的项目中很有用,请考虑为其加星并提供支持。