2016-11-26 75 views
0

項目(TodoList的)與immutable庫中創建,source here組件及其後無法卸載刪除店

存儲結構:project有很多tasks,在終極版店:State - 地圖,projects, tasks - 記錄

當我異步刪除項目...

export const removeProject = project => (dispatch) => { 
    if (!isProjectExist(project)) return Promise.resolve() 
    return projectService 
    .delete(project) 
    .then(
    () => { 
     dispatch(remove(project)) 
     console.log("post removeProject resolved") 
     }, 
     handleError, 
    ) 
} 

....這是在初始化後創建的 - 它將被刪除並正確卸載,但是當項目被作爲initialState通過 - ProjectList不會被重新描繪,並ProjectItem嘗試呈現自己與陳舊的數據,和失敗,因爲在畫面enter image description here


It have tests


它看起來像減速器returs改變了數據,但我使用immutablejs,以前我使用normalizr-immutable,但我認爲這個庫中的問題的來源,並寫我自己的normalizeInitialStatesource),它沒有幫助,現在我想臨屋區的T問題redux-immutable


也許源我掙扎着這個問題的解決


creator of redux says

整整一天,我不認爲這是我們可以解決。 React狀態更改爲 異步,React可能(或可能不)批處理它們。因此,當你按下「刪除」,Redux商店更新時,以及 應用程序都會收到新的狀態。即使應用程序狀態更改導致 項目的卸載,那將比mapStateToProps發生的更早的是 項目。

除非我錯了,否則我們無能爲力。你有兩種選擇:

請求所有需要的狀態在應用程序(或更低,例如ItemList)水平 並將其傳遞給「啞」項目。爲「當前未安裝」狀態添加保護措施,以將mapStateToProps 添加進去。例如,在這種情況下,您可以從渲染返回空值 。如果mapStateToProps 返回null,我們可能會讓connect()生成的組件 返回null。這有意義嗎?這太令人吃驚了嗎?

嗯,我從來沒有見過在mapStateToProps像return (<div></div>)存根或保障他人的代碼

回答

0

markerikson

我不能完全肯定我完全地按照你的問題是什麼,但作爲一個 猜測:這聽起來像子組件在父親 之前重新呈現。這是React-Redux v4及更早版本中的一個已知問題。 v5測試版修復了此問題。嘗試安裝react-redux @下一步,看看是否需要照顧您的問題 。