当前位置: 首页 > news >正文

前端逻辑错误或UI崩溃解决问题

全屏错误覆盖层或UI崩溃

  • Vue
  • React(错误边界)

Vue

Vue的全屏错误覆盖层解决,其实只需要配置Error就好,在开发服务器的client.overlay中设置关闭全屏覆盖层

module.exports = {devServer: {client: {overlay: {warnings: false,errors: false}}}
};

React(错误边界)

  • 错误边界的使用目的为:捕获并处理那些在渲染、生命周期方法和构造函数中出现的错误,不至于让一个组件的崩溃使得整个程序跟着一起崩溃
  • 比如,假设一个社交媒体应用中,用户的个人资料组件发生了错误,如果没有错误边界,整个应用可能会崩溃,但是,如果使用错误边界,可以将这个个人资料组件包裹在错误边界中,当组件出现错误时,错误边界可以渲染出备用的UI,比如一条错误提示信息或者一个默认的用户资料展示页面,而不会让整个应用崩溃

错误边界不能捕获以下几类错误:

  1. 事件处理器中的错误,因为它们在异步上下文中执行,超出了 React 渲染周期的范围
  2. 异步代码中的错误,比如 setTimeoutrequestAnimationFrame 回调函数中的错误
  3. 服务端渲染期间的错误
  4. 自身抛出的错误

ErrorBoundary.jsx

/* eslint-disable no-unused-vars */
/* eslint-disable react/prop-types */
import React, { Component } from 'react';class ErrorBoundary extends Component {constructor(props) {super(props);this.state = { hasError: false };}componentDidCatch(error, info) {this.setState({ hasError: true });console.error(error, info);}render() {if (this.state.hasError) {return <div>出错了?</div>;}return this.props.children;}
}export default ErrorBoundary;

模拟一个出错的程序

err.jsx

class Profile extends Component {render() {// 模拟一个会出错的组件// 假设这里的代码有bug导致渲染失败throw new Error('出错了!');// 正常情况下的 UI 渲染return (<div>{/* ... */}</div>);}
}

App.jsx

import Router from './router/index'
import ErrorBoundary from './components/ErrorBoundary'const App = () => {return (<div><h1>User Profile</h1><ErrorBoundary><Profile /></ErrorBoundary></div>)
}export default App

Profile 组件抛出错误时,错误边界会捕获这个错误并展示备用的 UI,而不会影响整个应用的渲染~

http://www.lryc.cn/news/323379.html

相关文章:

  • python爬取QQ音乐评论信息
  • Unity构建详解(1)——SBP介绍
  • 贪心算法(算法竞赛、蓝桥杯)--奶牛晒衣服
  • Redis列表:高效消息通信与实时数据处理的利器
  • Redis中的缓存雪崩
  • 使用远程工具连接Mysql
  • 2024不起眼的“致富”野路子,不想打工了,做做这些暴利创业项目。2024个人创业做什么项目好;最适合白手起家的创业项目
  • 从后端获取文件数据并导出
  • 哲♂学家带你深♂入了♂解结构体及结构体内存大小问题
  • 基于SSM的土家风景文化管理平台(有报告)。Javaee项目。ssm项目。
  • 2024年03月CCF-GESP编程能力等级认证C++编程一级真题解析
  • [Linux]条件变量:实现线程同步(什么是条件变量、为什么需要条件变量,怎么使用条件变量(接口)、例子,代码演示(生产者消费者模式))
  • 从Java到json:探索 Jackson 的魔力
  • Docker之docker compose!!!!
  • shardingsphere+达梦+jpa项目改造适配中遇到的一些问题与解决
  • YOLOV9训练自己的数据集
  • UG NX二次开发(C++)-CAM-获取加工操作的四种方法
  • python共享单车信息系统的设计与实现flask-django-php-nodejs
  • Python之Web开发中级教程----Django站点管理
  • Spring Boot项目中使用MyBatis连接达梦数据库6
  • Matlab快捷键与函数
  • 接雨水-热题 100?-Lua 中文代码解题第4题
  • JVM内存溢出排查
  • Leetcode 200. 岛屿数量
  • 多线程基础 -概念、创建、等待、分离、终止
  • 【Vue3】走进Pinia,学习Pinia,使用Pinia
  • 【TB作品】430单片机,单片机串口多功能通信,Proteus仿真
  • 【C++ leetcode】双指针问题
  • Kubernetes集群部署
  • 深拷贝与浅拷贝