Ale*_*ran 6 reactjs material-ui react-hooks react-hook-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>
Run Code Online (Sandbox Code Playgroud)
最后,我的周值是一个函数的结果,该函数返回一个包含周-年连接的字符串。
该值在 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])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5542 次 |
| 最近记录: |