setFieldValue给出从多个选择下拉菜单中始终设置为布尔值true的值

问题描述

如果我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>
  );
};

解决方法

似乎我写错了:setFieldValuesetFieldTouched,反之亦然:

<DiagnosisSelection
  diagnoses={diagnoses}
  name="diagnosisCodes"
  setFieldValue={setFieldValue}
  setFieldTouched={setFieldTouched}
  disabled={!(entrytype)}
/>