2017-04-04 42 views
0

我正在为包含多个字段的图形创建筛选器。他们中的大多数是已知的领域,但是其中一部分是动态的,那就是用户想要包含在图中的哪个房屋。这些房屋包含在我的状态中,并且对于每个用户都不同(基本上,用户选择他们命名的)。这是我想要基于道具动态渲染的房屋部分here从数组中的值渲染字段用于Redux表格

我发现的唯一例子是this,但是我还没有找到解决方案,可以将其转换为我的问题。我想我可能只是做这样的事情,每一个房子场放置在阵列中(就像这个例子):

renderHouseFields() { 
    const { fields: { houseArray } } = this.props; 
    return this.props.houses.map((house) => { 
     const houseField = (
     <label 
      {...houseArray} 
      className="col-xs-9 control-label" 
      htmlFor="cottageCheckbox" 
     > 
      <input type="checkbox" /> 
     </label> 
    ); 

     houseArray.addField(houseField); 

     return (
     <div key={house.name}> 
      <label 
      className="col-xs-3 control-label" 
      htmlFor="cottage" 
      > 
      {house.name} 
      </label> 
      {houseField} 
     </div> 
    ); 
    }); 
    } 

但当时我只是收到此错误信息:

警告:的setState (...):在现有状态转换期间无法更新(例如render)。渲染方法应该是道具和状态的纯函数。

这是我的第一个项目的反应,以便我敢肯定,我只是俯瞰东西在这里,但我不能找到解决方案,将不胜感激,如果有人可以帮助我在这里。

(我也知道,我可以升级到终极版形式6,用FieldArray,但我真的不希望做的是,在项目中间。)

回答

0

看你的代码,我想你得到的错误,因为你直接在渲染方法中添加到你的houseArray。这将触发对组件的道具的更新,这不应该出现在渲染方法中,因此会出现错误。

如果你看看你提供的Deep Form链接,你会注意到只有对域进行的修改发生在按钮事件处理程序中。

在你的情况下,我想你想要做的就是将你的房子数组中的条目链接到实际的复选框。现在你只需要添加的复选框,但它没有提到房子场:

<input type="checkbox" name={house} /> 

或者,也许这取决于房子的属性:

<input type="checkbox" name={`${house}.id`} /> 

在一个侧面请注意,我真的会推荐升级到版本6,因为API使用起来更有意义,它包含了比以前版本更多的改进。有一个移植指南:http://redux-form.com/6.6.1/docs/MigrationGuide.md/

+0

这当然有道理,稍后将不得不做一些测试。 如果我有时间升级到版本6我会,但我不知道我是否可以。 – Terris

+0

看起来我不得不花一个周末的时间,将我的REDX格式升级到版本6.感谢您的帮助! – Terris

+0

不客气!祝你好运,我相信它会工作得很好:) – Dennis