2017-04-04 39 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