[英]How do I work with custom error types in React error boundaries?
我在組件樹的頂部設置了一個錯誤邊界,如下所示:
renderApp() {
return (
<ErrorBoundary>
{ this.props.children }
</ErrorBoundary>
);
}
如果錯誤在樹上找到了,錯誤邊界將呈現一個簡單的錯誤頁面,將錯誤本身作為prop傳遞:
componentDidCatch(error, info) {
this.setState({
hasError: true,
error
});
}
render() {
if (this.state.hasError) {
return (
<ErrorPage error={this.state.error}/>
);
}
return this.props.children;
}
我已經開始定義自定義錯誤,以便在引發某些異常時拋出應用程序,只需擴展Error類:
class CustomError extends Error {}
然后在我的組件中,我拋出這些自定義錯誤,我想在錯誤頁面中檢測到這些錯誤,並根據其類型構建消息。 例如,如果我在組件樹中進一步拋出此錯誤:
throw new CustomError('This is the custom error message');
我希望能夠在我的錯誤頁面中嗅探該類型,並顯示與該類型相關的消息。
import CustomError from '../../errors/custom-error';
// This code has obviously been edited for brevity's sake
class ErrorPage extends React.Component {
render() {
if (this.props.error instanceof CustomError) {
errorMessage = "A custom error occurred.";
}
return <div>{errorMessage}</div>;
}
}
然而,在錯誤頁面,陣營只能識別this.props.error是一個instanceof Error
,而不是CustomError
。 如果我拋出TypeError
而不是CustomError
,那么錯誤頁面可以檢測錯誤類型。 但是傳遞自定義錯誤類型導致錯誤頁面不知道除了錯誤之外的類型,這顯然違背了定義自定義錯誤類型的目的。 我在這里錯過了什么? 這是React中的錯誤嗎? 任何輸入都將是最受歡迎的。
我使用React 16.0.0發現了這個問題,更新到16.2.0並且問題仍然存在。
問題不在於React,而在於Babel,我認為你正在使用它。 編譯類的方式不支持將instanceof
與擴展本機類(如Error
類一起使用。
有關更多信息,請參閱此Babel問題: https : //github.com/babel/babel/issues/3083
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.