You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在redux-form中使用多个<Fields/>组件的动态字段绑定问题

解决Redux-Form 组件动态绑定字段的问题

这个问题其实很好解决,核心就是别硬编码字段名,而是利用Fields组件传递给你的属性来动态获取对应字段,不管你传入question1/answer1还是question2/answer2,都能自动适配。

方法一:通过names属性明确获取字段名

Fields组件会把你传入的names数组作为props传给自定义的组件,我们可以直接从names里取出问题和答案的字段名,再通过fields[字段名]访问对应的输入属性:

renderInputGroupField({ fields, names }) {
  // 从names数组中提取问题和答案的字段名
  const [questionFieldName, answerFieldName] = names;
  
  return (
    <div className="form-group d-block">
      <div className="form-group input-group">
        <select className="form-select">
          <option>Multiple-Choice</option>
          <option>Open-Ended</option>
        </select>
        {/* 动态绑定问题输入框 */}
        <input 
          {...fields[questionFieldName].input} 
          type="text" 
          className="form-input" 
          placeholder="Type your question..."
        />
      </div>
      <div className="form-group">
        {/* 动态绑定答案输入框 */}
        <input 
          {...fields[answerFieldName].input} 
          type="text" 
          className="form-input" 
          placeholder="Comma-separated answer choices" 
        />
      </div>
    </div>
  );
}

方法二:通过Object.values快速提取字段

因为你每个Fields组件都固定传入两个字段(问题在前、答案在后),所以可以直接用Object.values(fields)按顺序提取字段,写法更简洁:

renderInputGroupField({ fields }) {
  // 按names数组的顺序提取问题和答案字段
  const [questionField, answerField] = Object.values(fields);
  
  return (
    <div className="form-group d-block">
      <div className="form-group input-group">
        <select className="form-select">
          <option>Multiple-Choice</option>
          <option>Open-Ended</option>
        </select>
        <input 
          {...questionField.input} 
          type="text" 
          className="form-input" 
          placeholder="Type your question..."
        />
      </div>
      <div className="form-group">
        <input 
          {...answerField.input} 
          type="text" 
          className="form-input" 
          placeholder="Comma-separated answer choices" 
        />
      </div>
    </div>
  );
}

为什么原来的代码失效?

你之前硬编码了fields.question1.input,但当你传入['question2', 'answer2']时,fields对象里的key是question2和answer2,根本不存在question1这个属性,自然无法绑定到正确的输入框。上面两种方法都是基于你传入的names动态获取字段,完美适配不同的字段组。

内容的提问来源于stack exchange,提问作者cyonder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:56:48