从 Redux 表单获取字段值 returns 'undefined'

Getting a field value from Redux form returns 'undefined'

我所拥有的让我在代码中大吃一惊,将其与 mapStateToProps and Redux form 中的指南进行比较。我正在尝试获取字段值,但我不断收到 undefined。 我拥有的是:

const myForm = reduxForm({
  form: 'myForm',
})(MyComponentClass);

const mapStateToProps = ((state) => ({
  l10n: l10nService,
  formValues: getFormValues('myForm')(state),
}));

export default connect(mapStateToProps)(myForm);

当我尝试输出类似

的 formValues 时
console.log(formValues);

我总是变得不确定。这令人沮丧,因为我正在重新阅读文档并且无法找到问题所在。我正在用这样的方法可视化该字段:

addSelectFieldD(element, key) {
  return (<Field
    key={key}
    name={element.name}
    label={l10nService.translate(element.label)}
    component={SelectField}
    units={element.units}
    options={this.props.selectOptions}
    onChangeDuration={this.onChangeDuration}
    onRetrieveSelectOptionsError={this.onRetrieveSelectOptionsError}
    informationMessage={l10nService.translate(element.tooltip)}
    submitted={this.state.formSubmitted}
  />);
}

有趣的是,我能够在其他一些组件中获取 formValues。我非常感谢任何帮助的人,因为我对此非常了解。

编辑:我创建了一个示例 here

好的,所以我已经解决了问题,在 redux 表单中,如果您不为表单字段提供一些初始值,它将是未定义的,而不是一个空对象。

为了给你一个想法,我已经用字段的初始值更新了沙箱 所以现在 this.props.formValues 您将获得该字段的默认值, 显然 onChange 不是句柄,所以即使你从下拉列表中更改值,它仍然保持不变,你可以更改它,但你明白了,

Here 你可以看看它是怎么做的,基本上我已经提供了表单的初始值

const myForm = reduxForm({
form: "myForm",
initialValues: {
 my: "value1",
 },
})(MyForm);

更新:当您使用 react-select 作为 select 组件时,您需要在将下拉列表值更改为

时发送更改操作
onChangeSelect = (props, newOption) => {
  this.props.dispatchChange(formName, fieldName, value)
} 

我已经为您的案例的完整工作示例更新了沙箱 希望对您有所帮助