reactjs - 带有 Material UI TextField 的 react-hooks-form 依赖字段
问题描述
使用 react-hooks-form 我试图根据另一个字段值更新一个字段。我面临的错误是我的值未在数据对象中注册。
这是我的代码:
const { handleSubmit, control } = useForm({});
const [dateValue, setDateValue] = useState()
const onSubmit = (data) => {console.log(data.week)} \\ undefined
<form
className={classes.root}
autoComplete="on"
onSubmit={handleSubmit(onSubmit)}
>
<Controller
name="date"
control={control}
defaultValue={props.operation === 'edit' ? props.values.date : null}
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
id="date"
type="date"
label="date"
value={value}
className={classes.textField}
onChange={(event) => {
onChange(event.target.value);
setDateValue(event.target.value);
}}
error={!!error}
helperText={error ? error.message : null}
InputLabelProps={{
shrink: true,
}}
/>
)}
rules={{ required: 'Date is required' }}
/>
<Controller
name="week"
control={control}
defaultValue=""
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
id="week"
type="text"
className={classes.textField}
label="week"
disabled={true}
value={dateValue}
onChange={onChange}
error={!!error}
helperText={error ? error.message : null}
/>
)
/>
</form>
最后,我的周值是一个函数的结果,该函数返回一个包含周 - 年连接的字符串。
该值在 TextField 中更新,但未在数据对象中注册。知道我错过了什么吗?
解决方案
在字段的onChange
处理程序上,date
您只更新dateValue
表单本身的状态而不是状态。
您有 2 个选项:
在
onChange
日期字段的处理程序中调用setValue
您从中获取的方法useForm
观察日期字段的值
const date = watch('date')
并useEffect
更新星期字段的值:
const {watch, setValue} = useForm()
const date = watch('date')
useEffect(() => {
const calculateWeekValue = () => {...//}
setValue('week', calculateWeekValue(date))
}, [date, setValue])
推荐阅读
- java - 如何在 EditText 或 String 中的所有行中添加特殊字符?
- css - 如何在 ionic 中将徽章添加到 ion-fab
- laravel - 如果关系存在,Laravel 资源返回 true
- powershell - Powershell / 结合两个脚本
- javascript - 在不同浏览器中创建特定大小的空数组时性能下降
- node.js - SocketIO 在 Ubuntu 服务器上不工作(不再)
- apache-beam - Apache Beam - 时间关系上的流式连接
- jquery - jQuery 扩展 Datatable 试图从 Laravel 变量中获取数据
- javascript - 为什么我不能重置变量的状态?(或者回到初始状态)
- java - 片段的 onCreateView 被多次调用