- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在组件树的顶部设置了一个错误边界,如下所示:
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,但问题仍然存在。
最佳答案
问题不在于 React,而在于 Babel,我假设您正在使用它。类的编译方式不支持将 instanceof
与扩展 native 类的类一起使用,例如 Error
。
有关更多信息,请参阅此 Babel 问题:https://github.com/babel/babel/issues/3083
关于javascript - 如何在 React 错误边界中使用自定义错误类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777152/
我是一名优秀的程序员,十分优秀!