2017-06-19 53 views
4

編輯1減少不刪除正確的數組項

縮短了代碼

removeContentNew(i) { 
    var contents = this.state.templateContent; 
    contents.splice(i, 1); 
    this.setState({ templateContent: contents }); 
    } 

它可能有一些與此有關:

componentDidMount() { 
    this.setState({ templateContent: this.props.template.content }); 
    } 

還是關於刪除錯誤的一個屏幕。當我登錄狀態時,它確實給了我正確的數組。也許地圖有問題嗎?

-

我試圖bug修復這段代碼,但我似乎無法找到的錯誤。

removeContent(i) { 
var $formgroup = false; 
const regex = new RegExp('^content.', 'i'), 
     contents = _.reduce(_.keys(this.refs), (memo, k) => { 
      if (regex.test(k) && k !== 'content.' + i) { 
      var $formgroup = $(this.refs[k]); 

      if (this.props.customer.getSetting('wysiwyg_enabled', true)) { 
       var html = CKEDITOR.instances['html_' + i].getData(); 
      } else { 
       var html = $formgroup.find('[name="html"]').val(); 
      } 

      memo.push({ 
       subject: $formgroup.find('[name="subject"]').val(), 
       html: html, 
       text: $formgroup.find('[name="text"]').val(), 
       language: $formgroup.find('[name="language"]').val() 
      }); 

      } 
      return memo; 
     }, []); 
this.setState({ templateContent: contents }); 
} 

i是欲從陣列templateContents刪除的項的ID。每次按刪除其中一個項目的按鈕,它似乎總是刪除最後一個,而忽略其他項目。

我一直在做k變量的一些測試,可能是問題的原因,但我不確定。

我對RegExp的做事方式真的很新穎。

任何想法如何解決這個問題?

+0

你想要什麼你的正則表達式來測試你沒有任何安全?任何以內容開始並且後面跟着任何字符的值?或者任何以內容開頭的值跟一個點?我不認爲第二種方法是有道理的,因爲你得到對象中屬性的名稱,因爲點是一個訪問操作符k不會有點字符 – Raulucco

+0

@Raulucco正則表達式已過時 - 請參閱編輯。我不知道爲什麼在這種情況下使用正則表達式... –

+0

我不認爲你輸入了if語句,因爲'k'是一個屬性的名稱將不會有點字符。嘗試檢查'k ==='content'&& _.isObject(this.refs [k])&&〜_.isUndefined(this.refs [k] [i])' – Raulucco

回答

0

問題在於數組映射。我會在這裏留下,因爲它幫助我解決了我的問題。

差(一般)

<tbody> 
    {rows.map((row, i) => { 
     return <ObjectRow key={i} />; 
    })} 
</tbody> 

這無疑是一個多 陣列迭代時在陣營看到的最常見的錯誤。除非向行數組中添加或刪除了一個元素 ,否則此方法將正常工作。如果您通過 迭代靜態的東西,那麼這是完全有效的(例如導航菜單中鏈接的數組 )。看看這個詳細的官方文檔 的解釋。

0

更新您在constructor而不是componentDidMount方法中的狀態。

constructor(pops) { 
    super(props); 
    this.state = { 
    templateContent: this.props.template.content 
    } 
} 

還呼籲對setState是異步,所以當正在執行的變化