问题描述
如果我console.log(data.value)它确实显示了一组选择的选项。但是,当我在表单中以验证函数进行console.log或提交表单时,该字段的值始终为boolean true
初始值为[],但是无论我选择哪个选项,输出始终为布尔值true。诊断是字符串。 StateOptions是具有键,值和文本的对象数组
在其余代码中,所有字段(我在这里不写它们)总是赋予被写入它们的值
看起来像setFieldValue函数(默认的Formik道具之一)工作不正确
这是该字段的代码,其值始终为true:
import { Dropdown,DropdownProps,Form } from "semantic-ui-react";
<DiagnosisSelection
diagnoses={diagnoses}
name="diagnosisCodes"
setFieldValue={setFieldTouched}
setFieldTouched={setFieldValue}
disabled={!(entrytype)}
/>
export const DiagnosisSelection = ({
diagnoses,setFieldValue,setFieldTouched,disabled,name
}: {
diagnoses: DiagnosisEntry[];
setFieldValue: FormikProps<{ diagnosisCodes: string[] }>["setFieldValue"];
setFieldTouched: FormikProps<{ diagnosisCodes: string[] }>["setFieldTouched"];
disabled:boolean;
name:string;
}) => {
const field = "diagnosisCodes";
const onChange = (
_event: React.SyntheticEvent<HTMLElement,Event>,data: DropdownProps
) => {
setFieldTouched(field,true);
setFieldValue(field,data.value);
};
const stateOptions = diagnoses.map(diagnosis => ({
key: diagnosis.code,text: `${diagnosis.name} (${diagnosis.code})`,value: diagnosis.code
}));
if (disabled)
return null
return (
<Form.Field name={name}>
<label>Diagnoses</label>
<Dropdown
name={name}
fluid
multiple
search
selection
options={stateOptions}
onChange={onChange}
/>
<ErrorMessage name={field} />
</Form.Field>
);
};
解决方法
似乎我写错了:setFieldValue
是setFieldTouched
,反之亦然:
<DiagnosisSelection
diagnoses={diagnoses}
name="diagnosisCodes"
setFieldValue={setFieldValue}
setFieldTouched={setFieldTouched}
disabled={!(entrytype)}
/>