Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React---新扩展RenderProps和ErrorBoundary

React---新扩展RenderProps和ErrorBoundary

作者头像
半指温柔乐
发布于 2021-05-14 02:28:18
发布于 2021-05-14 02:28:18
41200
代码可运行
举报
文章被收录于专栏:前端知识分享前端知识分享
运行总次数:0
代码可运行

一、render props

1.如何向组件内部动态传入带内容的结构(标签)?

Vue中:

使用slot技术, 也就是通过组件标签体传入结构 <AA><BB/></AA>

React中:

使用children props: 通过组件标签体传入结构

使用render props: 通过组件标签属性传入结构, 一般用render函数属性

2.children props

<A>

<B>xxxx</B>

</A>

{this.props.children}

问题: 如果B组件需要A组件内的数据, ==> 做不到

3.render props

<A render={(data) => <C data={data}></C>}></A>

A组件: {this.props.render(内部state数据)}

C组件: 读取A组件传入的数据显示 {this.props.data}

4.代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import React, { Component } from 'react'
 2 import './index.css'
 3 import C from '../1_setState'
 4 
 5 export default class Parent extends Component {
 6     render() {
 7         return (
 8             <div className="parent">
 9                 <h3>我是Parent组件</h3>
10                 <A render={(name)=><C name={name}/>}/>
11             </div>
12         )
13     }
14 }
15 
16 class A extends Component {
17     state = {name:'tom'}
18     render() {
19         console.log(this.props);
20         const {name} = this.state
21         return (
22             <div className="a">
23                 <h3>我是A组件</h3>
24                 {this.props.render(name)}
25             </div>
26         )
27     }
28 }
29 
30 class B extends Component {
31     render() {
32         console.log('B--render');
33         return (
34             <div className="b">
35                 <h3>我是B组件,{this.props.name}</h3>
36             </div>
37         )
38     }
39 }

二、ErrorBoundary错误边界

1. 理解:

  错误边界:用来捕获后代组件错误,渲染出备用页面

2. 特点:

  只能捕获后代组件生命周期产生的错误,不能捕获自己组件产生的错误和其他组件在合成事件、定时器中产生的错误

3. 使用方式:

  getDerivedStateFromError配合componentDidCatch

  // 生命周期函数,一旦后台组件报错,就会触发

  static getDerivedStateFromError(error) {

   console.log(error);

  // 在render之前触发

   // 返回新的state

   return {

  hasError: true,

  };

  }

componentDidCatch(error, info) {

   // 统计页面的错误。发送请求发送到后台去

   console.log(error, info);

  }

4. 代码

(1)child.jsx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import React, { Component } from 'react'
 2 
 3 export default class Child extends Component {
 4     state = {
 5         users:[
 6             {id:'001',name:'tom',age:18},
 7             {id:'002',name:'jack',age:19},
 8             {id:'003',name:'peiqi',age:20},
 9         ]
10         // users:'abc'
11     }
12 
13     render() {
14         return (
15             <div>
16                 <h2>我是Child组件</h2>
17                 {
18                     this.state.users.map((userObj)=>{
19                         return <h4 key={userObj.id}>{userObj.name}----{userObj.age}</h4>
20                     })
21                 }
22             </div>
23         )
24     }
25 }

(2)parent.jsx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import React, { Component } from 'react'
 2 import Child from './Child'
 3 
 4 export default class Parent extends Component {
 5 
 6     state = {
 7         hasError:'' //用于标识子组件是否产生错误
 8     }
 9 
10     //当Parent的子组件出现报错时候,会触发getDerivedStateFromError调用,并携带错误信息
11     static getDerivedStateFromError(error){
12         console.log('@@@',error);
13         return {hasError:error}
14     }
15 
16     componentDidCatch(){
17         console.log('此处统计错误,反馈给服务器,用于通知编码人员进行bug的解决');
18     }
19 
20     render() {
21         return (
22             <div>
23                 <h2>我是Parent组件</h2>
24                 {this.state.hasError ? <h2>当前网络不稳定,稍后再试</h2> : <Child/>}
25             </div>
26         )
27     }
28 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React 入门学习(十七)-- React 扩展
学到这里 React 已经学的差不多了,接下来就学习一些 React 扩展内容,可以帮助我们更好的开发和理解,这部分的知识还有很多的东西可以探寻,比如:网红 React-Hook,就是我们需要注意的地方,打了 100 多集的类式组件,出来一个 hooks ,现在用函数式组件偏多了…
小丞同学
2021/10/13
7310
react基础--3
setSate异步更新 setState第二个参数接收一个回调函数,当状态更新完毕且界面更新完毕后 调用该函数
切图仔
2022/09/08
6270
07-React Hooks(路由组件懒加载, Context上下文, 组件优化...)
Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。
彼岸舞
2022/08/24
1.4K0
React---新扩展Context和组件优化
  const XxxContext = React.createContext()
半指温柔乐
2021/05/13
6040
React 进阶 - 渲染调优
Suspense 是 React 提出的一种同步的代码来实现异步操作的方案。Suspense 让组件‘等待’异步操作,异步请求结束后在进行组件的渲染,即异步渲染。
Cellinlab
2023/05/17
9810
React 进阶 - 渲染调优
React---发送Ajax请求
const {a} = obj; //传统解构赋值
半指温柔乐
2021/04/25
2K0
[第26期] 干货!介绍4个实用的React实践技巧
Hooks 自推出以来就很火, 它改变了我们编写React 代码的方式, 有助于我们写更简洁的代码。
皮小蛋
2020/03/02
1.8K0
React 新特性讲解及实例(一)
定义:Context 提供了一种方式,能够让数据在组件树中传递而不必一级一级手动传递。
前端小智@大迁世界
2019/07/02
7860
React 新特性讲解及实例(一)
性能优化竟白屏,难道真是我的锅?
随着项目日渐“强壮”,优化首屏加载渲染速度迫在眉睫,其中就采用了 React 框架提供的 Reat.lazy() 按需加载的方式,测试过程中,在我们的埋点监控平台上,发现了很多网络请求错误的日志,大部分来自分包资源下载失败!难道我的优化变成负优化了???
秋风的笔记
2021/08/27
1.3K0
性能优化竟白屏,难道真是我的锅?
你要的 React 面试知识点,都在这了
React是流行的javascript框架之一,在2019年及以后将会更加流行。React于2013年首次发布,多年来广受欢迎。它是一个声明性的、基于组件的、用于构建用户界面的高效javascript库。
前端小智@大迁世界
2019/06/15
18.8K0
造一个 react-error-boundary 轮子
| 导语 捕获和处理前端组件异常是个十分重要且必要的操作。对于 React 来说,一般用 ErrorBoundary 来实现,今天就带大家一起造一个 react-error-boundary 的轮子吧~。 发生甚么事了 朋友们好,我是 ABCMouse 的一位前端开发,刚才老板对我说:海怪,发生甚么事了,怎么页面白屏了?我说:怎么回事?给我发了几张截图。我打开控制台一看: 哦!原来是昨天,有个后端年轻人,说要和我联调接口,我说:可以。然后,我说:小兄弟,你的数据尽量按我需要的格式来: interfac
用户1097444
2022/06/29
8650
造一个 react-error-boundary 轮子
造一个 react-error-boundary 轮子
朋友们好啊,我是海怪,刚才老板对我说:海怪,发生甚么事了,怎么页面白屏了?我说:怎么回事?给我发了几张截图。我打开控制台一看:
写代码的海怪
2022/03/29
1.2K0
造一个 react-error-boundary 轮子
React16 新特性
于 2017.09.26 Facebook 发布 React v16.0 版本,时至今日已更新到 React v16.6,且引入了大量的令人振奋的新特性,本文章将带领大家根据 React 更新的时间脉络了解 React16 的新特性。
前端迷
2019/08/27
1.2K0
React---消息订阅发布机制
2) PubSub.subscribe('delete', function(data){ }); //订阅
半指温柔乐
2021/04/26
7850
React 组件优化方案
如果你知道在什么情况下你的组件不需要更新,你可以在 shouldComponentUpdate 中返回 false 来跳过整个渲染过程。其包括该组件的 render 调用以及之后的操作。该方法会在 重新渲染前 被触发,其默认实现总是返回 true。
多云转晴
2020/02/17
3.3K0
React用错误边界来捕获和处理异常错误!
UI 中 JavaScript 错误不应该导致整个应用崩溃,错误边界就是解决方案(React 16 增加的功能)。
Learn-anything.cn
2021/11/28
1.2K0
React学习笔记(三)—— 组件高级
下面了的代码,我们用到了数组函数的map方法来实现数组的每一个值变成它的2倍,同时返回一个新数组,最后打印出了这个数组:
张果
2023/03/11
8.4K0
React学习笔记(三)—— 组件高级
一文带你梳理React面试题(2023年版本)
在react17中,只有react事件会进行批处理,原生js事件、promise,setTimeout、setInterval不会
用户10357900
2023/02/27
4.4K0
React 面试必知必会 Day 6
当应用程序运行在开发模式时,React 会自动检查我们在组件上设置的所有 props,以确保它们具有正确的类型。如果类型不正确,React 会在控制台生成警告信息。由于对性能的影响,它在生产模式中被禁用。必需 props 是用 isRequired 定义的。
用户1250838
2021/07/09
5.1K0
React 16 新特性全解(中)
但是这个事件仅支持那些支持指针事件的浏览器,比如目前最新版本的Chrome,Firefox,Edge IE浏览器)。但是如果你的应用程序真的依赖这些事件,可以使用第三方的polyfill。因为React团队对了避免增大react的bundle size,所以没有放进去。
前端迷
2019/07/12
9470
React 16 新特性全解(中)
相关推荐
React 入门学习(十七)-- React 扩展
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验