从 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)
}
我已经为您的案例的完整工作示例更新了沙箱
希望对您有所帮助
我所拥有的让我在代码中大吃一惊,将其与 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)
}
我已经为您的案例的完整工作示例更新了沙箱 希望对您有所帮助