【发布时间】:2020-06-03 12:45:13
【问题描述】:
我试图在顶层捕获一些错误,以展示世界上最漂亮的错误页面。
由于某种原因,我看到我的节点断开连接,但错误边界从未触发。
import React, { useState, useEffect } from 'react';
import ReactDOM from 'react-dom';
import ApolloClient, { gql } from 'apollo-boost';
const client = new ApolloClient({ uri: "/graphql" });
const query = gql`{ items { id }}`;
class ErrorBoundary extends React.Component {
state = { hasError: false };
static getDerivedStateFromError(error: any) {
return { hasError: true };
}
render() {
if (this.state.hasError) {
return <h1>Had error</h1>
} else {
return this.props.children;
}
}
}
function App() {
const [data, setData] = useState<any>(null);
useEffect(() => {
client.query({ query })
.then(res => setData(res))
.catch(err => { console.warn("Error:", err); throw err; });
}, []);
return <pre>Data: {data}</pre>;
}
ReactDOM.render(
<ErrorBoundary>
<App />
</ErrorBoundary>,
document.getElementById('root')
);
我在一个空的 create-react-app 项目中运行它。
我希望看到<h1>Had error</h1>;我收到 CRA 未处理的错误屏幕。
【问题讨论】:
-
错误边界只会在生产版本中显示。您如何通过测试看到自己的界限?
-
错误边界绝对适用于任何地方。只有调试错误覆盖没有在生产中显示。我通过使用
yarn start运行 cra 来测试它(然后我从反应中看到调试窗口),并在生产中使用yarn build&&npx serve build(显示带有“数据:”字符串的窗口(所以hasError永远不会去真的)
标签: reactjs error-handling apollo react-error-boundary