【问题标题】:Is there a possible way to use props.initialize() with dynamic input fields有没有可能使用 props.initialize() 与动态输入字段
【发布时间】:2025-12-03 04:45:01
【问题描述】:

我在 react 中使用 redux 创建一个设置表单。我想动态创建表单,以便可以在后端添加任意数量的设置并显示在表单中。

我有使用如下地图生成的字段:

const inputs = arr.map((setting, key) => {
  return  <Field
   type="textarea"
   name={setting.setting_id}
   id={setting.setting_id}
   component={renderField}
   placeholder={setting.value}
  />

在我的应用程序的其他部分,我使用了 'this.props.initialize({ nameOfField: value});'设置 redux 表单的初始值。但是,由于这些事先不知道,我尝试了

 settings.map((setting, key) => {
   this.props.initialize({
      [setting.setting_id]: setting.value
   });
 });

这不起作用,因为每次调用它时它都会覆盖以前的值,只留下数组中的最后一个设置具有正确的值集。

有没有办法一次收集我的所有设置并在 props.initialize 函数中调用它们,或者有更好的方法来初始化所有字段?

编辑:使用减速器代码

let SettingsForms =  connect(state => ({
    settings: state.settings.settings || [],
    getSettingsLoading: state.settings.getSettingsLoading || false,
}),
dispatch => ({
    getSettings: () => dispatch(getSettings()),
    updateSettings: (data) => dispatch(updateSettings(data))
}))(Settings);

export default reduxForm({
    form: "settingsForm",
})(SettingsForms);

【问题讨论】:

  • 您能否包含您的 reducer 的代码,显示设置如何合并到应用程序的状态中?
  • 已更新代码谢谢
  • 谢谢 - 这看起来像是将您的 SettingsForms 连接到商店的代码。 reducer 通常会包含一个 switch/case 块。你能包括那个吗?能否也包含updateSettings() 的代码?

标签: javascript reactjs react-redux


【解决方案1】:

刚刚在这里看到了这个答案:

Set value in field in redux form

我将初始化道具更改为 dispatch(change())

settings.map((setting, key) => {
    this.props.dispatch(change('settingsForm', setting.setting_id, setting.value));
});

这在组件中调用了确实挂载方法并且可以完美运行。

【讨论】: