gpt4 book ai didi

reactjs - React js 错误边界不适用于 Promise Catch

转载 作者:行者123 更新时间:2023-12-03 13:53:40 24 4
gpt4 key购买 nike

我们有一个错误边界组件:

import React from 'react';
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false, errorMessage:''};
}

componentDidCatch(error, info) {
// Display fallback UI
this.setState({ hasError: true, errorMessage: error });
// You can also log the error to an error reporting service
}

render() {
if (this.state.hasError) {
debugger
// You can render any custom fallback UI
return <h1>{this.state.errorMessage.toString()}</h1>;
}
return this.props.children;
}
}

export default ErrorBoundary;

我们这样使用它:

ReactDOM.render(
<Provider store={store}>
<Router>
<CookiesProvider>
<ErrorBoundary>
<NetworkMgmt />
</ErrorBoundary>
</CookiesProvider>
</Router>
</Provider>,
document.getElementById('root')
);

之后,我尝试使用下面的代码片段抛出错误,但这不会调用错误边界 componentDidCatch(),而是抛出未处理的异常。

    dataService.getNetworkSummary().then(function (result) {
debugger
self.networks = result;
self.setState({
items: result.slice(0, 20),
total: result.length,
skip: 0,
pageSize: 20,
pageable: {
buttonCount: 5,
info: true,
type: 'numeric',
pageSizes: [20, 40, 60, 80, 100],
previousNext: true
},
sortable:{
allowUnsort: true,
mode: 'single',
sortDir:'Asc'
}

})
}).catch(err =>
{
throw new Error("This is my error");
});

有什么方法可以让我们以正确的方式做到这一点。

最佳答案

正如 promise 中的那样,您正在捕获错误,这意味着它不会在组件中显示错误,因为您已经在函数中处理了错误。catch 的目的是处理该 block 中的错误而不干扰组件。如果你想手动抛出错误,你可以使用

throw 'Some Error';

或者您可以删除 catch block ,但我不推荐这样做。

更新:错误边界会在渲染期间、生命周期方法以及其下方的整个树的构造函数中捕获错误。

关于reactjs - React js 错误边界不适用于 Promise Catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52346499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com