React.Component API Error Boundaries
8006 ワード
一、説明
エラー境界は、Reactのコンポーネントツリーであり、サブアセンブリツリー内の任意の位置でJavaScriptエラーをキャプチャすることができ、ログを打つことができ、またはエラーを表示するUIコンポーネントである.
エラー境界は、レンダリング中、ライフサイクル法、およびその下のツリー全体の構造関数においてエラーを捕捉することができる.
1つのクラスのコンポーネントが次のライフサイクル方法のいずれかまたは2つを定義している場合、このようなコンポーネントはエラー境界となります. static get DerivedStation Froom() component DidCatch() 上記のライフサイクル方法から未処理のjavascriptエラーをキャプチャし、エラーインターフェースを表示するUIを更新することができる.
エラー境界の使用にも一定の要求があります.は、エラー境界のみを使用して異常を捕捉することができ、または異常から を回復することができる.は、エラー境界を制御フロー に使用できない.
より多くのエラー境界の情報はエラー境界の文書を見ることができます.
https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html
エラー境界はまた、ツリーの中性子コンポーネントのエラーをキャプチャすることができます.エラー境界は、自身のエラーをキャプチャすることができません.
二、static get DerivedStteFrome()
この方法はサブアセンブリがエラーを投げた後に呼び出すことができ、受信したパラメータerrはサブアセンブリが投げたエラーであり、このコンポーネントでは、stateを更新して、コンポーネント全体のプレゼンテーションを更新するべきである.
三、component DidCatch()
componentDidCatch(error,info)というライフサイクルは、サブアセンブリがエラーを出した時に呼び出します.主に二つのパラメータを受信します. error:投げたエラー情報 info:コンポーネントエラースタックを有するオブジェクトは、どのコンポーネントによって引き起こされたエラー情報を含んでいますか?
エラー境界の文書がもっと見られます.https://reactjs.org/docs/error-boundaries.html#component-stack-tracces
component DidCatch()はcomit段階で呼び出されたので、エラー情報を記録する必要がある場合などの副作用が可能です.
間違った情報をレンダリングするUIは、get DerivedStation Froom()で処理しなければならない.
エラー境界は、Reactのコンポーネントツリーであり、サブアセンブリツリー内の任意の位置でJavaScriptエラーをキャプチャすることができ、ログを打つことができ、またはエラーを表示するUIコンポーネントである.
エラー境界は、レンダリング中、ライフサイクル法、およびその下のツリー全体の構造関数においてエラーを捕捉することができる.
1つのクラスのコンポーネントが次のライフサイクル方法のいずれかまたは2つを定義している場合、このようなコンポーネントはエラー境界となります.
エラー境界の使用にも一定の要求があります.
より多くのエラー境界の情報はエラー境界の文書を見ることができます.
https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html
エラー境界はまた、ツリーの中性子コンポーネントのエラーをキャプチャすることができます.エラー境界は、自身のエラーをキャプチャすることができません.
二、static get DerivedStteFrome()
この方法はサブアセンブリがエラーを投げた後に呼び出すことができ、受信したパラメータerrはサブアセンブリが投げたエラーであり、このコンポーネントでは、stateを更新して、コンポーネント全体のプレゼンテーションを更新するべきである.
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// UI
return { hasError: true };
}
render() {
if (this.state.hasError) {
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
注意get DerivedStation Frome()はレンダー段階で呼び出されたので、get DerivedStation Frome()で副作用が許されません.副作用用例を使うなら、componentDidCatch()が使えます.三、component DidCatch()
componentDidCatch(error,info)というライフサイクルは、サブアセンブリがエラーを出した時に呼び出します.主に二つのパラメータを受信します.
エラー境界の文書がもっと見られます.https://reactjs.org/docs/error-boundaries.html#component-stack-tracces
component DidCatch()はcomit段階で呼び出されたので、エラー情報を記録する必要がある場合などの副作用が可能です.
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// state
return { hasError: true };
}
componentDidCatch(error, info) {
// :"componentStack":
// in ComponentThatThrows (created by App)
// in ErrorBoundary (created by App)
// in div (created by App)
// in App
logComponentStackToMyService(info.componentStack);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
注意エラーが発生した場合は、componentDidCatchを使ってエラー情報をレンダリングするUIをsetStateに呼び出すことができますが、このような方法は将来のバージョンでは利用できません.間違った情報をレンダリングするUIは、get DerivedStation Froom()で処理しなければならない.