问题描述
写了一个componentDidCatch
的demo,说是可以阻止渲染的错误在页面上显示,防止页面崩溃,但是我的结果是错误的提示一闪而过,页面还是报错了,怎么回事?
相关代码
import React, { Component, lazy, Suspense } from "react";
const About = lazy(() => import("./About"));
export default class Main extends Component {
state = {
hasError: false,
};
static getDerivedStateFromError(error) {
// 更新 state 使下一次渲染能够显示降级后的 UI
return { hasError: true };
}
componentDidCatch() {
//this.setState({ hasError: true });
}
render() {
const { hasError } = this.state;
if (hasError) {
return <h1>组件获取失败!</h1>;
}
return (
<div>
<Suspense fallback={<div>loading,please wait……</div>}>
<About />
</Suspense>
</div>
);
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
页面上应该是显示组件获取失败!
,但是
开发环境下你想展示的错误页面会一闪而过,正式环境下会一直展示错误页面,你可以打包之后看一下