【问题标题】:Redux Form - Initializing state with dynamic field namesRedux Form - 使用动态字段名称初始化状态
【发布时间】:2023-03-11 11:53:03
【问题描述】:

我在尝试为表单上的某些字段设置默认值时遇到了一些问题。我遇到的问题是,由于它在 .map 函数内部,我需要有动态字段名称,并且当我尝试在我的 `mapStateToProps 中使用 intializeValues 时不知道应该如何命名它。

我的字段数组也在父组件的 FormSection 中。

我正在尝试为其设置默认值的字段。

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

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

带有redux的父组件


 <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);

【问题讨论】:

  • 我不这么认为 - 这不使用 .map - 我正在谈论通过具有动态字段名称的数组进行映射。他的字段只是一个简单的“名字” - 我的字段名称在数组中。名称={${table}.leftStile}

标签: reactjs redux redux-form


【解决方案1】:

如果您还可以提供演示组件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)。

我希望这会有所帮助。

【讨论】:

  • Fields 实际上来自 Redux 形式的 Field Array (redux-form.com/7.4.2/docs/api/fieldarray.md)。 OrderTable 是一个包含订单表的组件。 DoorOrders 只是持有不同表单并处理提交的父组件。我刚刚更新了我的帖子以显示包含 OrderTable 组件的 FormSection 组件。我会尝试 fromPairs 看看是否有效!谢谢!
  • 我尝试使用 ramda - 但我不断收到未定义的错误。 R 是未定义的,映射也是如此。我希望有一种方法可以在 Field 组件上设置默认值,而不会遇到所有这些麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2020-02-22
相关资源
最近更新 更多