2016-05-17 11 views
4

私たちは、エラー伝播とエラーページ表示の仕組みをセットアップしようとしているreact-reduxプロジェクトを持っています。React-Reduxエラーページ管理

私たちがこれまで行ってきたことは、非同期APIコールや他の場所でエラーが発生した場合、アクションを実行してルートレベルコンポーネントAppを変更することです。ルートレベルレデューサーでは、エラーが伝搬された状態でエラーフィールドを設定します。エラーが発生した場合は、私たちが持っているコンテンツではなくエラーページをレンダリングします。

フローは次のようになります。コンポーネントA - >アクション - >アプリケーションリデューサ - >アプリケーションコンポーネント - レンダリングエラーページ。

しかし、問題はエラーコンポーネントに残っているということです。そして、エラーフィールドがエラーページをレンダリングする状態にとどまるので、ユーザーが新しいアクションをトリガーするたびに、またはエラーページが表示されるたびに、状態のエラーフィールドを{}にリセットするメカニズムが基本的に必要です。

この問題を解決する良い方法が見つかりませんでした。誰もが前に直面していたかもしれない非常に一般的なもののように見えます。一般的に、非同期エラーの伝播をどのように処理し、それに応じてエラーページを表示できますか?

答えて

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のようなルーティングシステムを使用している場合、減速機からのエラーを表示するエラーページを実装することができます。

+0

はい、反応ルータを使用します。ルータを経由してエラーページを表示することができますが、それは実装されていますが、以前のエラーで状態が汚れています。コンポーネントから状態を(リデューサー関数をトリガーするアクションを介して)更新しようとすると、レンダリングメソッド内の状態を更新するための苦情があります。レンダリングメソッドの外でそれを行う方法はありますか? – ralzaul

+0

確か:[componentWillReceiveProps()](https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops) –

+0

を試してください。状態を再度更新すると、componentWillReceiveProps()の問題が発生します。アプリは再レンダリングされ、エラーページはもう表示されません。したがって、エラーページが表示され、状態が更新され、状態のエラーがもう存在しないため、エラーページが失われるようです。 – ralzaul