React尚硅谷115-126(setState、Hooks、Fragment、context、组件优化、renderprops

news2024/9/20 22:53:58

122,context


只能用value传,可以传对象,字符串

一种组件间通信方式, 常用于【祖组件】与【后代组件】间通信

使用:

  1. 创建Context容器对象:

const XxxContext = React.createContext()

  1. 渲染子组时,外面包裹xxxContext.Provider, 通过value属性给后代组件传递数据:

<xxxContext.Provider value={数据}>

子组件

</xxxContext.Provider>

  1. 后代组件读取数据:

//第一种方式:仅适用于类组件

static contextType = xxxContext // 声明接收context

this.context // 读取context中的value数据

//第二种方式: 函数组件与类组件都可以

<xxxContext.Consumer>

{

value => ( // value就是context中的value数据

要显示的内容

)

}

</xxxContext.Consumer>

123.PureComponent和优化


办法1:

重写shouldComponentUpdate()方法

比较新旧state或props数据, 如果有变化才返回true, 如果没有返回false

办法2:

使用PureComponent

import React,{PureComponent} from ‘react’

PureComponent重写了shouldComponentUpdate(), 只有state或props数据有变化才返回true

注意:

只是进行state和props数据的浅比较, 如果只是数据对象内部数据变了, 返回false

不要直接修改state数据, 而是要产生新数据

项目中一般使用PureComponent来优化

124.renderProps


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

Vue中:

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

React中:

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

使用render props: 通过组件标签属性传入结构,而且可以携带数据,一般用render函数属性

children props

xxxx

{this.props.children}

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

render props

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

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

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

126.组件间的关系:

  • 父子组件

  • 兄弟组件(非嵌套组件)

  • 祖孙组件(跨级组件)

几种通信方式:

1.props:

(1).children props

(2).render props

2.消息订阅-发布:

pubs-sub、event等等

3.集中式管理:

redux、dva等等

4.conText:

生产者-消费者模式

比较好的搭配方式:

父子组件:props

兄弟组件:消息订阅-发布、集中式管理

祖孙组件(跨级组件):消息订阅-发布、集中式管理、conText(开发用的少,封装插件用的多)

125.错误边界


理解:

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

特点:

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

使用方式:

getDerivedStateFromError配合componentDidCatch

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

static getDerivedStateFromError(error) {

console.log(error);

// 在render之前触发

// 返回新的state

return {

hasError: true,

};

}

componentDidCatch(error, info) {

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

console.log(error, info);

}

126,总结通信方式


  • 父子组件

  • 兄弟组件(非嵌套组件)

  • 祖孙组件(跨级组件)

1.props:

(1).children props

(2).render props

2.消息订阅-发布:

pubs-sub、event等等

3.集中式管理:

redux、dva等等

4.conText:

生产者-消费者模式

最后前端到底应该怎么学才好?

如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。

不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1858320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MIT6.s081 2021 Lab Utilities

Boot xv6 按照示例切换到 util 分支后&#xff0c;看到目录下包含 Makefile 文件&#xff0c;执行 make qemu 即可。 sleep 思路 借助系统调用 sleep 实现一个命令行程序&#xff0c;关键是要找到封装了系统调用的 C 函数的位置&#xff0c;根据提示&#xff1a; … user/u…

软件测试--花了我一周时间整理各种测试模板

2024软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;-CSDN博客跳槽涨薪的朋友们有福了&#xff0c;今天给大家推荐一个软件测试面试的刷题小程序。https://blog.c…

北邮《计算机网络》MAC子层笔记

文章目录 缩写复习MAC层所在层次动态分配信道算法们的简要介绍信道的五条基本假设多路访问的协议&#xff08;理论上的协议&#xff09;aloha协议CSMA协议其他冲突避免协议无线局域网协议 &#xff0c;MACA 以太网协议802.3&#xff08;实际协议&#xff0c;刚刚是理论&#xf…

光猫BOB 功率调测误差分析与校验指南

DDM&#xff08;Digital Diagnostic Monitoring&#xff09;数字诊断监控技术&#xff0c;是光模块中使用的技术&#xff0c;以便用户能够监控光模块的实时参数。这些参数包括工作温度、工作电压、工作电流、发射和接收光功率等&#xff0c;还可以显示模块的常规波长、速率、传…

在Vue表单中设置缺省值

有个需求&#xff0c;在新增记录的时候&#xff0c;打开新增页面&#xff0c;员工姓名处获取到当前登录用户的用户名&#xff0c;并将其设置为缺省值。 /** 新增按钮操作 */handleAdd() {this.reset();this.open true;// this.form.employeeName this.$store.state.user.name…

计算机网络 DHCP以及防护

一、理论知识 1.DHCP&#xff1a;用于在网络中自动分配IP地址及其他网络参数&#xff08;如DNS、默认网关&#xff09;给客户端设备。 2.VLAN&#xff1a;逻辑上的局域网分段&#xff0c;用于隔离和管理不同的网络流量。 3.DHCP地址池&#xff1a;为每个VLAN配置不同的DHCP地…

【语义分割系列】基于cityscape的DDRNet算法

基于cityscape的DDRNet算法 前言 DDRNet是专门为实时语义分割设计的高效主干。该模型由两个深度分支组成,在这两个分支之间执行多次双边融合,并且还设计了一个新的上下文信息抽取器,名为深度聚合金字塔池模块(DAPPM),用于扩大有效的接受域,并基于低分辨率特征映射融合…

QT在VS环境中使用,控件显示中文乱码解决方法

首先来看乱码显示的效果如下&#xff1a; 上图左侧显示内容为中文&#xff0c;控件对应代码如下&#xff1a; QLabel* UserNameLabel new QLabel(QString("用户名&#xff1a;")); QLabel* NameLabel new QLabel(tr("姓名&#xff1a;"));下面我们对QL…

【Spine学习15】变换约束

变换约束&#xff1a;能让一个骨骼受另一个骨骼的变化影响。 1、选择m创建一个变换约束&#xff1a; 2、点击这个约束&#xff0c; 将移动数值拉的越满&#xff0c;m越接近s骨骼 当约束为0也就是默认的时候&#xff0c;m骨骼将不会受影响&#xff0c;变换约束可有可无。 tips…

物联网系统运维——实验备份与恢复,数据镜像软件DRBD介绍,DRBD的安装和应用,extundelete的安装和应用(重点),环境准备,配置设置

一.数据备份 1.数据备份的重要性 备份是系统中需要考虑的最重要的事项,虽然这在系统的整个规划,开发和测试过程中甚至占不到1%,看似不太重要且默默无闻的工作只有到恢复的时候才能真正体现出其重要性,任何数据的丢失与数据宕机&#xff0c;都是不可以被接收的。 2.数据备份策…

数据结构与算法笔记:高级篇 - 最短路径:地图软件是如何计算出最优出行路径的?

概述 基础篇的时候&#xff0c;我们学习了图的两种搜索算法&#xff0c;深度优先搜索和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图&#xff0c;也就是图中的每一条变都有一个权重&#xff0c;我们该如何计算两点之间的最短路径&#xff08;经过的边的权…

ViT:3 Compact Architecture

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则…

VMware共享文件夹设置

1、VMWare设置 1&#xff09;虚拟机 -> 设置 2&#xff09;点击 选项 -> 共享文件夹 -> 设置为 总是启用 -> 并 添加一个本地共享文件夹。设置完毕&#xff0c;点击 确定。 2、创建共享文件夹、挂载 1&#xff09;打开终端&#xff0c;在mnt/目录下创建一个名为…

原Veritas(华睿泰)中国研发中心敏捷教练、项目集经理郑鹤琳受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 原Veritas&#xff08;华睿泰中国&#xff09;中国研发中心敏捷教练、项目集经理郑鹤琳女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“敏捷项目管理-知行合一”。大会将于6月29-30日在北京举办&#xff0c;敬请关注…

So:万法皆空,唯因果不空

在《long long ago》中&#xff0c;我们说到long一词中藏着因果关系&#xff0c;long通汉字“以”字。long是生育过程中&#xff0c;婴儿已经呱呱坠地&#xff0c;但尚未剪掉脐带的形象。 下面我们来解剖另一个英语单词&#xff1a;so。 一、so&#xff1a;万法皆空&#xff…

前端vue-cli相关知识与搭建过程(项目创建,组件路由)very 详细

一.关于vue-cli 1.什么是vue Vue (读音 /vju ː /&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。 Vue.js 是前端的主流框架之一&#xff0c;和 Angular.js…

【大数据】Hadoop学习笔记

基本概念 Hadoop组成 HDFS: Hadoop分布式文件存储系统, 在Haddop中处于底层/核心地位YARN: 分布式通用的集群资源管理系统和任务调度平台, 支撑各种计算引擎执行MapReduce: 第一代分布式计算引擎, 但因为部分原因, 许多企业都不直接使用MapReduce, 但许多底层软件仍然在使用Ma…

v-jstools插件 - 自动补环境

一、为啥要补环境&#xff1f; 我们每次逆向扣完代码存放在 nodejs 上是运行不出结果的&#xff0c;因为缺少浏览器环境特有的一些 window/document/navigator/localstorage 等参数&#xff0c;所以我们需要把这些缺少的浏览器环境补上&#xff0c;让这份js代码在本地nodejs环…

无人机巡检小羊仿真

详细视频地址 仿真效果 可视化三维仿真 gazebo物理仿真 px4 飞控仿真 仿qgc简易地面站 详细视频地址

每日一题——Python代码实现PAT甲级1059 Prime Factors(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 改进建议 我要更强 时间复杂度…