Redux Form - Инициализация состояния с динамическими именами полей - PullRequest
0 голосов
/ 01 октября 2018

У меня возникают некоторые проблемы при попытке установить значение по умолчанию для некоторых полей в моей форме.Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку она находится внутри функции .map, мне нужно иметь динамические имена полей и не знаю, как я должен называть ее, когда я пытаюсь использовать intializeValues в моем `mapStateToProps.

My Field Array также находится внутри FormSection в родительском компоненте.

Поле, в котором я пытаюсь установить значение по умолчанию для.

{fields.map((table, index) =>

  <Field
    name={`${table}.leftStile`}
    type="text"
    component={renderField}
    label="leftStile"
  />
}

Родительский компонент с избыточным числом


 <FormSection name="dimensions">
   <OrderTable />
 </FormSection>

const mapStateToProps = state => ({
  form: state.form,
  submitted: state.Orders.submitted,
  initializeValues: {
  //problem naming here <-----
  }
});

const mapDispatchToProps = dispatch => bindActionCreators({
  addDoorOrder
}, dispatch);

DoorOrders = connect(
  mapStateToProps,
  mapDispatchToProps
)(DoorOrders);

export default reduxForm({
  form: 'Orders',
  enableReinitialize: true
})(DoorOrders);

1 Ответ

0 голосов
/ 02 октября 2018

Я обновлю ответ, если вы также можете предоставить презентационный компонент DoorOrders.И форма или пример fields реквизита.
На данный момент, я буду предполагать, что fields является DoorOrders реквизитом, не происходит от redux и имеет форму, подобную:

[
    { leftStile: "firstName", initialValue: "John" },
    { leftStile: "lastName", initialValue: "Doe" },
    //...
]

Вы можете получить доступ к этим реквизитам в функции mapStateToProps в качестве второго аргумента :

import { fromPairs } from "ramda"

//...

const mapStateToProps = (state, ownProps) => ({
   form: state.form,
   submitted: state.Orders.submitted,
   initializeValues: R.fromPairs( // <= see below
       ownProps.fields.map(table => [table.leftStile, table.initialValue])
   )
});

//...

Я использую ramda's fromPairsпреобразовать [[a, b], [c, d]] в { a: b, c: d }, потому что мне это нравится, но другие библиотеки, такие как lodash , могут достичь этого (или ванильный JavaScript).

Надеюсь, это поможет.

...