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

react扩展(一些单独技术点)

fragment

一些小场景会用到:

class Table extends React.Component{render(){return(<table><tr><Column/></tr></table>)}
} 

将table进行组件抽离:

 function Column() {return (<div><td>hello</td><td>world</td></div>)} 

可是tr紧接的就会是div,而非td。

由此,引出新方式:fragment

它可以使得不添加额外的DOM节点

 function Column() {return (<React.fragment><td>hello</td><td>world</td></React.fragment>)} 

这样,就会使tr与rd进行衔接啦。不会警告啦。

错误边界:

需求:程序出错了,阻止整个程序崩溃。

本质是一个组件,包裹所有的组件,当子组件出错误的时候它可以捕获到。

先定义子组件:

 class BugCount extends React.Component {state = {count: 0,}render() {if (this.state.count === 5) {throw new Error("count error")}return (<h1 onClick={() => {this.setState(({ count }) => ({ count: count + 1 }))}}>{this.state.count}</h1>)}} 

当点击到5时,抛出一个错误。

一个界面有很多组件,如果任何一个出现错误崩溃,直接渲染错误边界的自定义错误页面,会导致错误页面覆盖其他正确子组件,所以可以用错误边界包裹住子组件。

如果子组件错误:

1.错误边界捕获,应用不能崩溃

2.记录日志

3.错误信息显示优化

如何定义错误边界?类组件。下面定义错误边界:

 class ErrorBoudary extends React.Component { 子组件发生错误--react库<--抛给钩子函数(接收错误:error,errorInfo) componentDidCatch(error, errorInfo) {console.log("componentDidCatch");console.log(error);console.log(errorInfo);this.setState({error,errorInfo})} render(){ return(有错误: const {error,errorInfo} = this.state //拆解出错误//有错误:if(error||errorInfo){return (//自定义错误页面<div><h1>没事的,一个小错误而已,你已经很棒了哦</h1><span>wrong</span> <details style={{whiteSpace:"pre-wrap"}}>{error&&error.toString()}<br/>详情</details></div>)} //没错误,直接渲染页面else{return (this.props.children)} ) }
 } 

封装在App里,就可以运行了

 function App() {return (<div><h1>app component</h1><ErrorBoudary><BugCount /></ErrorBoudary></div>)} 

高阶组件

场景:

1.组件代码复用,很多组件都有共同逻辑,考虑是否需要把公共代码抽离出来2.使用三方组件:保护三方组件 需求:扩展三方组件(增强) 使用高阶组件 ,不侵害原有组件在三个组件中要用到一段相同的代码段,于是我们考虑将该代码块抽离出来用于增强,并通过props注入被增强的组件:

 let HOC = (C) => {return class _ extends React.Component {common() {return "common function logic"}render() {return (<C common={this.common} />)}}} 

所以当调用高阶组件时,就是传入一个组件:

const HOCA = HOC(A) //A成为高阶组件
const HOCB = HOC(B) //B成为高阶组件
const HOCC = HOC(C) //C成为高阶组件 

如今就可以在ABC三个函数组件中通过props接收到传递过来的common方法了。

 class A extends React.Component {render() {return (<div><h1>A Componnet</h1>{this.props.common()//直接调用}</div>)}} 

B、C也是如此,类似于A。

最后在App组件中使用的就是高阶组件的化身:

 function App() {return (<div><HOCA /><HOCB /><HOCC /></div>)}ReactDOM.render(<App />, document.getElementById("app")) 

完美使用高阶组件。

网络请求

想要用get请求一个url,并从中拿到数据:

使用componentDidMount这个生命周期方法,因为它在组件挂载之后执行,也只会执行一次。通常用于发送网络请求或者添加订阅。

componentDidMount(){const {url} = props.urlfetch(url,{method:"GET"}).then(response=>response.json()).then({data}=>{data}) //回调获取url中的数据
} 

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

相关文章:

  • 多媒体相关的计算和种类
  • Vue项目实战——实现一个任务清单【基于 Vue3.x 全家桶(简易版)】
  • 分布式架构简述
  • 跨平台应用开发进阶(三十四) :uni-app 实现微信分享
  • 丙烯酸酯-聚乙二醇-羧基,AC-PEG-COOH,Acrylate-PEG-Acid一种带PEG间隔基的交联剂
  • Vue基本原理
  • 【MySql】mysql之主从复制和读写分离搭建
  • Python读取csv文件(super详细简单版)
  • 前端开发node.js、vue安装环境【安装node版本管理工具-nvm,耗时一天时间踩坑总结】
  • Cesium插值计算:运动的Label标签
  • HTML网页的按钮详解
  • daisyUI快速上手,解决TailwindCSS疯狂堆砌class的问题
  • java基于ssm的农产品网络交易平台-农产品和特产商城 vue+element
  • 微服务和微服务框架
  • WZOI-365最长非零串
  • [PHP内核探索]PHP中的哈希表
  • __proto__ 和 prototype的关系
  • 《剑指offer》分解让复杂问题更简单
  • 【React系列】如何构建React应用程序
  • CSS实用技巧干货
  • ERLANG 网工修炼笔记 ---- UDP
  • Java程序员幽默爆笑锦集
  • jquery ajax学习笔记
  • Just for fun——迅速写完快速排序
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Node项目之评分系统(二)- 数据库设计
  • React Transition Group -- Transition 组件
  • Vue ES6 Jade Scss Webpack Gulp
  • vue自定义指令实现v-tap插件
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 那些年我们用过的显示性能指标
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #《AI中文版》V3 第 1 章 概述
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (全注解开发)学习Spring-MVC的第三天
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)大型网站的系统架构
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • ***测试-HTTP方法
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .equals()到底是什么意思?
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net连接MySQL的方法
  • .Net下的签名与混淆
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .net专家(高海东的专栏)
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现