2016-05-26 4 views
19

У меня возникла проблема с встраиванием нескольких форм на одну страницу. Я заметил, что configForm выполняется один раз, даже с несколькими формами на странице, поэтому я не могу динамически генерировать разные имена форм.Как вставить одну и ту же редукционную форму несколько раз на страницу?

Screenshot showing multiple text fields bound together.

function configForm(){ 
    const uuid = UUID.generate(); 

    const config = { 
    form:`AddCardForm_${uuid}`, 
    fields:['text'], 
    validate:validate 
    } 

    return config; 
} 

export default reduxForm(configForm(), mapStateToProps, {togglePanelEditMode, addCardToPanel})(CardFormContainer); 

Как добавить формы, чтобы они не зависели друг от друга?

ответ

38

Существует два способа вставки одной и той же формы несколько раз на страницу.

1. Использование formKey (Redux форма 5)

formKey является официальным способом сделать это при использовании [email protected] (или ниже). Вы должны передать ключ от родителя, чтобы определить форму:

panels.map(panel => 
    <PanelForm key={panel.uuid} formKey={panel.uuid} initialValues={panel} /> 
           ^^^^^^^ 
         declare the form key 
) 

Ваше определение формы будет:

reduxForm({form: "AddCardForm", fields: ["text"], validate}) 

Однако эта модель была удалена из [email protected].

2. Использование уникального имени form (Перевождь формы 5 и выше)

Следующий шаблон является рекомендуемым способом идентификации формы, так как форма Redux 6. Он полностью совместим с предыдущими версиями.

panels.map(panel => 
    <PanelForm key={panel.uuid} form={`AddCardForm_${panel.uuid}`} initialValues={panel} /> 
           ^^^^ 
        declare the form identifier 
) 

Ваше определение формы будет:

reduxForm({fields: ["text"], validate}) 
// No `form` config parameter here! 
+0

Это работает! Спасибо, Флоран. – Kyle

+1

Спасибо за это. Очень близко задал этот вопрос еще раз ... желаю, чтобы он появился в моих веб-поисках !! –

+2

Спасибо. Информация о версии в двух вариантах может быть уточнена. Мое предложение: 1. ... (Форма Redux 5), 2. ... (Redux Form 6+) – jmu