javascript - 为什么删除元素后所需的检查不起作用?
问题描述
你能告诉我为什么我需要的检查在自动完成中不起作用。我正在使用material UI
反应钩子形式。重现步骤
- 单击
Submit
按钮显示字段是必需的。 - 然后从列表中选择任何元素。
- 删除选定的元素然后再次单击提交按钮。它应该显示“必填”字段检查。但它没有显示任何内容,为什么?
这是我的代码 https://codesandbox.io/s/mui-autocomplete-with-react-hook-form-0wvpq
<Controller
as={
<Autocomplete
id="country-select-demo"
multiple
style={{ width: 300 }}
options={countries}
classes={{
option: classes.option
}}
autoHighlight
getOptionLabel={option => option.label}
renderOption={(option, { selected }) => (
<React.Fragment>
<Checkbox
icon={icon}
checkedIcon={checkedIcon}
style={{ marginRight: 8 }}
checked={selected}
/>
{option.label} ({option.code}) +{option.phone}
</React.Fragment>
)}
renderInput={params => (
<TextField
{...params}
label="Choose a country"
variant="outlined"
fullWidth
name="country"
inputRef={register({ required: true })}
// required
error={errors["country"] ? true : false}
inputProps={{
...params.inputProps,
autoComplete: "disabled" // disable autocomplete and autofill
}}
/>
)}
/>
}
onChange={([event, data]) => {
return data;
}}
name="country"
control={control}
/>
解决方案
当表单最初加载时,表单的值是一个空对象 -
{}
当您选择一个国家(例如,“安道尔”)时,您的表单值变为:
{"country":[{"code":"AD","label":"Andorra","phone":"376"}]}
然后当您取消选择国家/地区时,表单的值变为:
{"country":[]}
一个空数组在技术上符合“必需”标准(毕竟它不为空),因此您所需的处理程序不会触发。
您可以通过在App
班级中显示表单的值来验证这种情况正在发生 -
const { control, handleSubmit, errors, register, getValues } = useForm({});
return (
<form noValidate onSubmit={handleSubmit(data => console.log(data))}>
<Countries control={control} errors={errors} register={register} />
<Button variant="contained" color="primary" type="submit">
Submit
</Button>
<code>{JSON.stringify(getValues())}</code>
</form>
);
简单的解决方法是不从您的控件返回一个空数组作为值 -onChange
按如下方式更新您的处理程序 -
onChange={([event, data]) => {
return data && data.length ? data : undefined;
}}
推荐阅读
- java - 为什么杰克逊反序列化 json 无法按顺序打印对象数组?
- r - (函数()中的错误:未使用的参数(高度= 8,宽度= 8)
- javascript - 通过 jquery change 方法传递参数
- product - OroCommerce 自定义可配置产品问题
- python - ValueError:没有为“conv2d_input”提供数据。需要每个键的数据:['conv2d_input']
- r - 数据框的多个变量之间的相关性按不同的变量分组
- javascript - Svelte App 可以读取 firebase 数据库,但不能添加
- qt - 尝试在 Qt creator 上编译时出错(警告被视为错误)
- python - 将 print 函数的输出写入文本文件
- java - Java“序言中不允许的内容。”