javascript - 如何在 React 错误边界中使用自定义错误类型?

标签 javascript reactjs

我在组件树的顶部设置了一个错误边界,如下所示:

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>;
  }
}

但是,在错误页面中,React 仅识别出 this.props.error 是 Error 的实例,而不是 CustomError 的实例。例如,如果我抛出 TypeError 而不是 CustomError,则错误页面可以检测到错误类型。但是传递自定义错误类型会导致错误页面除了知道它是一个错误之外对该类型一无所知,这显然违背了定义自定义错误类型的目的。我在这里错过了什么?这是 React 中的错误吗?任何输入将不胜感激。

我使用 React 16.0.0 发现了这个问题,已更新到 16.2.0,但问题仍然存在。

最佳答案

关于javascript - 如何在 React 错误边界中使用自定义错误类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777152/

相关文章:

javascript - 在 jQuery 中追加字符串变量

reactjs - 滚动 React 时更改样式

reactjs - 试图找到卷轴的方向

javascript - 错误 : Cannot define class using reflection

javascript - React 中两个组件的渲染之间的转换 [React-Spring]

javascript - 返回无效(0);与返回;中断功能

javascript - Rails、JQuery Mobile 和 Javascript

javascript - 正确使用 MutationObserver

javascript - 如何使用 javascript 链接 href

javascript - react native - TypeError : null is not an object