Введите окончательную форму, передайте дополнительные параметры в состояние формы - PullRequest
0 голосов
/ 24 октября 2019

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

Согласно документации, он передает следующие реквизиты в функцию рендеринга, включая (крайне важно) FormState .

Давайте посмотримв моей конкретной реализации, сосредоточив внимание на функции рендеринга:

<Form
onSubmit={() => {console.log("wow coolio you submitted a form!")}}
initialValues={initData}
validate={validateMyForm}
render={({ handleSubmit, reset, submitting, pristine, values }) => {
formSubmitHandler = async () => {
await handleSubmit()
return values
}
return(
//... form components with the values prop passed into them below
//...i.e. <Part_1_Of_Form values={values}/>

Если я правильно понял, вы заметите, что я уничтожаю объект рендеринга в JSX {({})} и получаю values из FormState.

Затем я передаю их различным компонентам модульной формы ниже, например <Part_1_Of_Form/>, чтобы каждая часть формы реагировала на изменения состояния в других частях формы. Но моя проблема в том, что я хочу, чтобы он реагировал не только на ценности. Например, если я хочу отображать метку условно в зависимости от того, выбран ли другой параметр метки (или другая опция) в другой части формы, я не могу получить к ней доступ, потому что я получаю доступ только к значениям, а не к меткам.

Пример , с инструментом выбора валюты для распространения по всей форме с использованием состояния:

<Field 
name="part_one.currency"
component={MyRFFInputSelectComponent}
options={[{value: 'USD', label: '$ (USD)', symbol: '$'}, {value: 'EUR', label: '€ (EUR)', symbol: '€'}]}
required={true}
className="form-control">
</Field>

Я могу передать значение (скажем, USD) вокруг другогочасти формы, используя реквизит рендеринга и часть values этого возвращаемого объекта - но я не хочу. Я хочу передать symbol - значение (USD) принадлежит базе данных (это всего лишь USD, потому что БД хочет, чтобы она была в виде такой строки), но другие части формы должны отображать символ вместоЗначение, как только я выберу свою валюту в верхней части формы.

Пример того, что я должен сделать сейчас в другом месте в форме:

<Field
...
append={values['part_one']['currency']}

Пример того, что я хочу сделать:

<Field
...
append={symbols['part_one']['currency']}

Или, может быть, даже лучше:

<Field
...
append={allFormData(notjustvalues)['part_one']['currency']['symbol']}

Так, чтобы на каждом входе, для которого нужна цена, в прикрепленной метке могла отображаться валюта.

Этот сценарий использованиясмысл?

Есть ли другой способ подобрать символ или способ добавить его в FormState? Я думаю, что для перфоратора было бы плохо передавать что-то вроде allFormData, чтобы получить один собственный символ. Я не могу использовать символ для значения, потому что мой бэкэнд-разработчик будет плакать. ?

1 Ответ

0 голосов
/ 04 ноября 2019

Если я правильно вас понимаю, ваше значение для part_one.currency должно быть целым {value: 'USD', label: '$ (USD)', symbol: '$'} объектом.

Тогда вы можете сделать values.part_one.currency.symbol в другом месте вашей формы. Если вы хотите, чтобы при отправке значение было только 'USD', вам нужно будет обработать это в вашей функции onSubmit. Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...