使用了componentDidCatch页面仍然报错是怎么回事?

发布于 2022-09-11 22:39:37 字数 986 浏览 21 评论 0

问题描述

写了一个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>
    );
  }
}

你期待的结果是什么?实际看到的错误信息又是什么?

页面上应该是显示组件获取失败!,但是
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

菩提树下叶撕阳。 2022-09-18 22:39:37

开发环境下你想展示的错误页面会一闪而过,正式环境下会一直展示错误页面,你可以打包之后看一下

毁梦 2022-09-18 22:39:37

这是生产环境用的

梦里梦着梦中梦 2022-09-18 22:39:37

image.png

因为开发环境捕获错误后仍会冒泡至window,所以一般会触发overlay,比如你用了react-refresh默认就会带这个。但是这个不会带到生产环境。所以你直接关掉这个就好了
image.png

柒夜笙歌凉 2022-09-18 22:39:37

About 组件有问题,是不是路径错了?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文