返回顶部
首页 > 资讯 > 精选 >React中Portals与错误边界处理实现方法
  • 938
分享到

React中Portals与错误边界处理实现方法

2023-06-20 17:06:44 938人浏览 泡泡鱼
摘要

这篇文章主要讲解了“React中Portals与错误边界处理实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React中Portals与错误边界处理实现方法”吧!目录Portals错误

这篇文章主要讲解了“React中Portals与错误边界处理实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React中Portals与错误边界处理实现方法”吧!

目录
  • Portals

  • 错误边界处理

  • 如果没有使用错误边界会怎样?

  • 注意点

Portals

可以说是 插槽,但 不同于 Vue 中的 slot,它指的是将一个 React 元素渲染到指定的容器 (真实 DOM) 中

比如说,Modal 组件一般默认直接作为 body 的真实结构的子元素渲染出来,那么我们就可以借助 ReactDOM.createPortal(ReactElement, RealDOM container) 创建一个 React 元素,示例代码:

import React from 'react'import ReactDOM from 'react-dom'import Modal from './components/Modal'const PortalModal = ReactDOM.createPortal(<Modal />, document.body)export default function App() {    return <div className="app-container">        <PortalModal />    </div>}

我们可以在浏览器控制台中看到,真实的 Modal 组件其实是作为 body 的直接子元素渲染出来的,但通过 React 开发工具,我们可以看到 Modal 组件在虚拟 DOM 树的结构中依旧在 App 组件下,类名为 app-container 的 div 中

所以,我们可以得出结论:React 组件虚拟 DOM 树结构与真实 DOM 树结构可以是不一致的

因而需要注意事件冒泡

  • React 中的事件其实是经过包装的

  • 它的事件冒泡是根据虚拟 DOM 树的结构来冒泡的,而不是真实 DOM 树的冒泡机制

错误边界处理

默认情况下,若一个组件在渲染期间 (render) 发生错误,那么就会导致整个组件树全部被卸载
错误边界:就是一个组件,用于捕获 渲染期间 子组件发生的错误,并有能力阻止错误继续向父组件传播

让某个组件捕获错误 (类组件):

使用静态方法 static getDerivedStateFromError,子组件渲染错误时会触发此函数

  • 静态方法,所以不能使用 this

  • 此函数返回值 (对象) 会与 state 混合覆盖状态

  • 触发时间点为:渲染子组件发生错误后,在更新页面之前

  • 只有子组件渲染发生错误,才会触发 (即自身组件发生错误或其兄弟组件、父组件发生错误均不会触发)

import React, {PureComponent} from 'react'export default class ErrorBoundary extends PureComponent {    state = {        isError: false    }    static getDerivedStateFromError(error) {        console.log('Rendering Error: ', error)        return {            isError: true        }    }    render() {        if (this.isError) {            return <span>Something Wrong...</span>        }        return this.props.children    }}

使用 componentDidCatch(error, info) 函数

  • 是个实例方法

  • 运行时机在渲染子组件发生错误后,且页面更新之后 (更改状态会导致组件树卸载完之后又重新构建组件树,比较浪费效率)

  • 通常该函数用于往后台传递并记录错误信息

import React, {PureComponent} from 'react'export default class ErrorBoundary extends PureComponent {    state = {        isError: false    }    componentDidCatch(error, info) {        // info 即为错误的摘要信息        console.log('Rendering Error: ', error)        console.log('Rendering info: ', info)        this.setState({            isError: true        })    }    render() {        if (this.isError) {            return <span>Something Wrong...</span>        }        return this.props.children    }}

如果没有使用错误边界会怎样?

自 React 16 起,任何未被错误边界捕获的错误将会导致整个 React 组件树被卸载。

经验告诉我们,完全移除比保留错误UI更好。例如,在类似 Messenger 的产品中,把异常的 UI 展示给用户可能会导致用户将信息错发给别人。

增加错误边界能够让你在应用发生异常时提供更好的用户体验。例如,Facebook Messenger 将侧边栏、信息面板、聊天记录以及信息输入框包装在单独的错误边界中。如果其中的某些 UI 组件崩溃,其余部分仍然能够交互。

注意点

某些错误,错误边界组件不会捕获

自身组件的错误

异步的错误 (如 setTimeout 中抛出的错误)

import React, {PureComponent} from 'react'// ErrorBoundary.jsxexport default class ErrorBoundary extends PureComponent {    state = {        isError: false    }        static getDerivedStateFromError(error) {        console.log('Rendering Error: ', error)        return {            isError: true        }    }    render() {        if (this.isError) {            return <span>Something Wrong...</span>        }        return this.props.children    }}// Comp.jsx Comp 组件export default funtion Comp() {    setTimeout(() => {        throw new Error('setTimeout error')    }, 1000)    return <div>Comp</div>}// App.jsx 使用export default function App() {    return <>        <ErrorBoundary>            <Comp />        </ErrorBoundary>    </>}

感谢各位的阅读,以上就是“React中Portals与错误边界处理实现方法”的内容了,经过本文的学习后,相信大家对React中Portals与错误边界处理实现方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: React中Portals与错误边界处理实现方法

本文链接: https://lsjlt.com/news/298578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • React中Portals与错误边界处理实现方法
    这篇文章主要讲解了“React中Portals与错误边界处理实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React中Portals与错误边界处理实现方法”吧!目录Portals错误...
    99+
    2023-06-20
  • React中Portals与错误边界处理实现
    目录Portals 错误边界处理 如果没有使用错误边界会怎样? 注意点 Portals 可以说是 插槽,但 不同于 Vue 中的 slot,它指的是将一个 React 元素渲染到指...
    99+
    2024-04-02
  • React中Portals与错误边界处理怎么实现
    这篇“React中Portals与错误边界处理怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“React中Portal...
    99+
    2023-06-05
  • React 错误边界组件的处理
    这是React16的内容,并不是最新的技术,但是用很少被讨论,直到通过文档发现其实也是很有用的一部分内容,还是总结一下~ React中的未捕获的 JS 错误会导致整个应用的崩溃,和整...
    99+
    2024-04-02
  • 怎么在React中处理错误边界组件
    这期内容当中小编将会给大家带来有关怎么在React中处理错误边界组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。React中的未捕获的 JS 错误会导致整个应用的崩溃,和整个组件树的卸载。从 React...
    99+
    2023-06-14
  • 捕获并处理“切片边界越界”错误的方法
    知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个Golang开发实战,手把手教大家学习《捕获并处理“切片边界越界”错误的方法》,在实现功能的过程中也带大家重新温习相关知识点,温故而...
    99+
    2024-04-04
  • JavaScript 错误处理中的错误边界:隔离和处理异常
    ...
    99+
    2024-04-02
  • php7中异常与错误的处理方法
    这篇文章将为大家详细讲解有关php7中异常与错误的处理方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。异常与错误的概述什么叫做异常?异常是指程序运行中不符合预期情况以及与正常流程不同的状况。比如你链接数...
    99+
    2023-06-14
  • Golang try catch与错误处理的实现
    目录Golang try catch panic panic主要使用场景: recover error 预定义错误值 自定义错误类型 使用 panic和recover模拟 tyr...
    99+
    2024-04-02
  • SQL Server中实现错误处理
    一、SQLServer数据库引擎错误 1、查询系统错误信息 SQLServer在每个数据库的系统视图sys.messages中存储系统自定义(Message_id <= 500...
    99+
    2024-04-02
  • java中HttpClient的错误处理方法
    这篇“java中HttpClient的错误处理方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java中HttpClien...
    99+
    2023-06-30
  • JavaScript中怎么实现错误处理
    JavaScript中怎么实现错误处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用 Promise 处理错误为了演示 Promise...
    99+
    2024-04-02
  • php常见的错误与异常处理方法
    本篇内容介绍了“php常见的错误与异常处理方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php与其他计算机编程语言在遇到错误就抛出异常不...
    99+
    2023-06-02
  • Java事件与错误处理方法是什么
    这篇文章主要讲解了“Java事件与错误处理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java事件与错误处理方法是什么”吧!  12.1事件处理  传授新知  消息驱动、事件处理...
    99+
    2023-06-03
  • Golang方法的错误处理与调试技巧
    Golang方法的错误处理与调试技巧 Golang(又称Go语言)作为一门由Google开发的现代化编程语言,具有简洁、高效和并发特性,受到越来越多开发者的青睐。在实际的开发过程中,错...
    99+
    2024-02-23
    golang 错误处理 调试技巧 go语言
  • 详解JS中异常与错误处理的正确方法
    目录简介1 面向错误编程1.1 墨菲定律1.2 先判否2. js 内置的错误处理2.1 Error 类2.2 throw2.3 try catch2.4 Promise.catch3...
    99+
    2023-05-16
    JS异常处理 JS错误处理 JS异常
  • Golang中错误处理的优秀方法
    错误处理在编程中是一个非常重要的主题。在Golang中,错误处理的方式与其他编程语言有所不同,因此需要掌握一些最佳实践来优化代码的可读性和可维护性。 1. 返回错误值而不是抛出异常 与...
    99+
    2024-02-26
    实践 golang 错误处理
  • React事件处理过程中传参的实现方法
    目录摘要1.箭头函数2.函数柯里化3.bind方法摘要 首先我们知道,在React中,是通过小驼峰式给元素绑定事件: fn = ()=>{ //执行代码 } ...
    99+
    2022-11-13
    React事件处理过程中传参 React事件处理 React传参
  • react中事件处理与柯里化的实现
    目录1. 事件处理阻止默认行为合成事件2. 柯里化柯里化的目的一个简单的例子1. 事件处理 React 中元素也可接受、处理事件,但是在语法上有一点不同。 在React 中所有事件的...
    99+
    2024-04-02
  • SQL Server中如何实现错误处理
    今天小编给大家分享一下SQL Server中如何实现错误处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、SQ...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作