React Final Form Передайте дополнительные параметры в состояние формы

React Final Form использует отрисовка шаблона prop в его компоненте формы, и я пытаюсь понять, как я могу изменить его, чтобы передать ему дополнительные аргументы.

Согласно документации, он передает следующие реквизиты в функция рендеринга - включая (что особенно важно) 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? Я думаю, что для perf, вероятно, плохо передавать что-то вроде allFormData только для того, чтобы получить один пользовательский символ. Я не могу использовать символ для значения, потому что мой внутренний разработчик будет плакать. ????


person Summer Developer    schedule 23.10.2019    source источник


Ответы (1)


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

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

person Erik R.    schedule 04.11.2019