2016-05-17 35 views
4

我們有一個react-redux項目,我們試圖設置錯誤傳播和錯誤頁面顯示機制。React-Redux錯誤頁面管理

到目前爲止,我們一直在做的是:當異步API調用或其他地方發生錯誤時,我們觸發一個操作並修改根級組件App。在根級別減速器中,我們將錯誤字段設置爲傳播錯誤的狀態。當觀察到錯誤時,我們渲染錯誤頁面而不是我們擁有的內容。

所以流程如下:組件A - >動作 - > App Reducer - >應用程序組件 - 渲染errorPage。

但問題是狀態仍然與錯誤組件。而且,由於錯誤字段保持在應用程序繼續呈現錯誤頁面的狀態。我們基本上需要一種機制,以便每當用戶觸發新的操作或每當錯誤頁面呈現時,都會將狀態中的錯誤字段重置爲{}。

我們無法找到解決此問題的好方法。它看起來像以前任何人都可能遇到的非常普通的一個。一般來說,我們如何處理異步錯誤傳播並相應地顯示錯誤頁面。

回答

2

正確的解決這個問題是使用:

componentWillUnmount() { 
    this.props.handleErrorReset(); 
} 

handleErrorReset功能基本上觸發,觸發誤差值的復位錯誤狀態的行動,一些符合這樣的:

const clearErrorState = (state) => state.set('error', fromJS({})); 

componentWillUnmount基本上是在卸載相關組件後立即執行的,所以對於重新設置或清除狀態中不再需要的值非常有用。

https://facebook.github.io/react/docs/component-specs.html#unmounting-componentwillunmount

1

如果您使用的是路由系統,比如react-router,您可以實現一個顯示reducer錯誤的錯誤頁面),並且您可以使用任何其他頁面刪除reducer中可能存在的錯誤。

+0

是的,我們使用react-router。我們可以通過路由器顯示錯誤頁面,這是真實的,並且我們實現了這一點,但是我們的狀態仍然與先前的錯誤一樣髒。當我嘗試更新組件的狀態(通過觸發reducer函數的動作)時,我收到了一個更新render方法內部狀態的投訴。有沒有辦法在渲染方法之外做到這一點? – ralzaul

+0

當然:嘗試[componentWillReceiveProps()](https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops) –

+0

componentWillReceiveProps()的問題是當您再次更新狀態時,應用程序重新呈現,錯誤頁面不再顯示。所以它就像你顯示錯誤頁面,狀態得到更新,並且你失去了錯誤頁面,因爲錯誤狀態不再存在。 – ralzaul