Как установить значение поля формы на основе другого поля формы с помощью react, typescript и formik?

#javascript #reactjs #typescript #formik

Вопрос:

я хочу установить значение переключателя на основе другого поля формы, заданного пользователем с помощью react, typescript и formik.

что я пытаюсь сделать? код выглядит так, как показано ниже

в файле констант

 export const OPTION_KEY = 'option'; export const SWITCH_KEY = 'switch'; export const initialValues: SomeValues = {  [OPTION_KEY] = '',  [SWITCH_KEY] = '', };   

в другом файле

 import {OPTION_KEY, SWITCH_KEY} from 'constants';  const options: SelectOption[] = [  { value: 'option1', label: 'option1' },  { value: 'option2', label: 'option2' },  { value: 'option3', label: 'option3' }, ];  const FirstStep = ({formikBag} : formikBag: FormikPropslt;SomeValuesgt;;}) =gt; {  return(  lt;FormField label="Option" fieldId={OPTION_KEY}gt;  {({field, form}: FieldProps) =gt; (  lt;Select  id={field.name}  inputId={field.name}  onChange={(option: SelectOption) =gt;  form.setFieldValue(field.name, option.value)  }  options={options}  placeholder={options[0].label}  value={options.filter(option=gt; option.value === field.value)}  /gt;  lt;/FormFieldgt;  lt;FormField label="switch" fieldId={SWITCH_KEY}gt;  {({ field, form }: FieldProps) =gt; (  lt;Switch  id={'switch'}  {...field}  checked={isSwitchToggled}  onChange={() =gt; {  form.setFieldValue(SWITCH_KEY,'');  }  }}  /gt;  )}  lt;/FormFieldgt;  )};  

Теперь я хочу сделать следующее: когда пользователь выбирает опцию 1 или опцию 2 в меню выбора (то есть OPTION_KEY), по умолчанию я хочу, чтобы переключатель был выключен. если пользователь выбирает опцию 3, то по умолчанию должна быть включена клавиша SWITCH_KEY.

теперь пользователь также может включать или выключать переключатель, даже если выбранная пользователем опция является опцией 1, опцией 2 или опцией 3.

как я могу изменить приведенный выше код, означающий, как я должен установить состояние SWITCH_KEY в зависимости от выбранного пользователем параметра, а затем, если пользователь переключит его, как я могу включить или выключить переключатель. не мог бы кто-нибудь помочь мне с этим.

Я новичок в использовании formik и react. Спасибо.

Ответ №1:

Сохраните состояние вашего коммутатора где-нибудь в состоянии компонента, например isSwitchToggled (укажите, что делает эта ваша переменная isSwitchToggled , но она наверняка выглядит как переменная состояния), и просто измените этот параметр состояния на основе выбранной опции. Затем отрисовайте свой переключатель соответствующим образом:

 const FirstStep = ({formikBag} : formikBag: FormikPropslt;SomeValuesgt;;}) =gt; {  const [isSwitchToggled, setSwitchToggled] = React.useState(false);   const setSwitch = (fieldName, fieldValue) =gt; {  if (fieldName === 'name' amp;amp; fieldValue === 'John') {  setSwitchToggled(true);  } else setSwitchToggled(false);  }   return(  lt;FormField label="Option" fieldId={OPTION_KEY}gt;  {({field, form}: FieldProps) =gt; (  lt;Select  id={field.name}  inputId={field.name}  onChange={(option: SelectOption) =gt;  form.setFieldValue(field.name, option.value)   setSwitch(field.name, option.value)  }  options={options}  placeholder={options[0].label}  value={options.filter(option=gt; option.value === field.value)}  /gt;  lt;/FormFieldgt;  lt;FormField label="switch" fieldId={SWITCH_KEY}gt;  {({ field, form }: FieldProps) =gt; (  lt;Switch  id={'switch'}  {...field}  checked={isSwitchToggled}  onChange={() =gt; {  form.setFieldValue(SWITCH_KEY,'');  }  }}  /gt;  )}  lt;/FormFieldgt;  )};  

Комментарии:

1. Спасибо. что такое имя поля и значение поля в функции setSwitch?

2. Просто посмотрите, как называется эта функция: setSwitch(field.name, option.value) .