2017-08-10 55 views
0

請閱讀完整的問題,因爲它可能有助於瞭解此行爲。反應本機中的奇怪錯誤ListView

我有一個分段的Lis​​tView,其中包含一個任務列表。列表視圖有三個部分(Recent,Later和Past)。每個任務都可以有一個用戶列表,當任務完成時應該通知用戶。標記爲完成時,任務將移至Past部分。當任務被標記爲已完成,下面作爲終極版店內

  • 做過的事情發生

    1. 馬克任務如果任務的參與者,發送遠程通知參與者

    當該任務被標記爲完成,還原存儲更新,觸發ListView的重新渲染。第二步發生在根據日誌重新渲染ListView之後。

    發生的事情是,第二步是由不同任務的道具觸發的,而不是標記爲完成的任務。就好像ListView項目被重新使用,並且ListView項目以前用於標記爲已完成的任務的項目現在可用於某些其他項目,其餘的代碼將使用其他任務的道具運行,這非常奇怪。以下是它在代碼中的外觀:

    changeTaskStatus =() => { 
        this.props.dispatch(ActionCreators.markTaskDone(this.props.id)) 
    
        // A re-render is triggered once the above action is dispatched and the 
        // this.props.id in the next step is not the one that the user marked as done 
        this.props.dispatch(ActionCreators.notifyParticipants(this.props.id)) 
        } 
    

    我將嘗試創建一個展示此問題的示例項目。如果您有任何有關此行爲的信息,請發佈答案或評論。

  • +0

    是的,我會知道一點關於它,請確認它總是與最後一個任務的道具觸發(在列表視圖中的最後一個意義上) –

    +0

    我想這意味着我需要將所有的「道具」存儲在一個對象中,並使用該對象來訪問數據。它不是非常直觀,並且打破了javascript的閉包行爲。 –

    回答

    0

    你應該ListView綁定數據,如遵循

    <ListView ... renderRow={this.renderList.bind(this)} />

    所以當後更新列表,你需要在功能changeTaskStatus和更新的ListView傳遞ID來。

    ,你也可以做的ID單獨的對象,並通過自定義邏輯管理它

    +0

    我不認爲我明白你的建議。 'renderRow'方法已經綁定到'this'。 ''changeTaskStatus'方法在用戶點擊任務時被調用,並且任務列表由於標記任務完成而被重新呈現,並且在調用通知參與者期間'this'指向不同的對象。 –

    +0

    我認爲當你調用this.props.dispatch(ActionCreators.notifyParticipants(this.props.id)),你傳遞this.props.id可能你在這裏得到錯誤的ID,所以需要檢查這裏,如果你沒有得到在這裏完美的身份證,然後去我的解決方案 –

    +0

    嗨@Nisarg,你的回答對我沒有幫助,因爲它與我所問的問題無關。 –