簡體   English   中英

如何在React錯誤邊界中使用自定義錯誤類型?

[英]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並且問題仍然存在。

我創建了一個Github存儲庫 ,顯示了React如何處理錯誤邊界。

似乎React能夠檢測到CustomError 在此處查看此行代碼

如果這個例子代表你所擁有的,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM