如何在React Hook Form中实现输入框初始禁用与动态启用
解决方案
核心问题是你直接使用了原始JSON的disabled属性,无法动态更新。要实现动态禁用/启用,需要把表单配置存入React状态,通过修改状态触发组件重渲染。
实现步骤
- 将原始JSON配置存入React状态,方便后续修改
- 用
useEffect设置定时器,5秒后更新指定字段的disabled状态 - 渲染表单时,使用状态中的配置来绑定
disabled属性
完整代码示例
import React, { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; const json = [ { type: "input", name: "firstName", label: "First Name", disabled: true }, { type: "input", name: "lastName", label: "Last Name", disabled: true } ]; export default function App() { const { register, handleSubmit } = useForm(); // 将JSON配置转为可修改的状态 const [formFields, setFormFields] = useState(json); // 5秒后启用firstName字段 useEffect(() => { const enableTimer = setTimeout(() => { setFormFields(prevFields => prevFields.map(field => field.name === "firstName" ? { ...field, disabled: false } : field ) ); }, 5000); // 清理定时器,避免内存泄漏 return () => clearTimeout(enableTimer); }, []); const onSubmit = (data) => console.log(data); return ( <form onSubmit={handleSubmit(onSubmit)}> {formFields.map(field => ( <div key={field.name} style={{ margin: "10px 0" }}> <label>{field.label}</label> <br /> <input {...register(field.name)} disabled={field.disabled} style={{ padding: "4px" }} /> </div> ))} <button type="submit">Submit</button> </form> ); }
关键说明
- 用
useState管理表单配置,确保修改disabled时能触发组件重渲染 setTimeout中通过map遍历原状态,只修改目标字段的disabled属性,保持其他字段不变- 渲染输入框时,直接从
formFields状态中读取disabled值,实现动态控制
内容的提问来源于stack exchange,提问作者user5711656
相关产品推荐
相关产品推荐

