动态组件:类组件

news2024/11/25 10:47:13

函数组件的缺点:

第1次渲染组件,把函数执行,产生一个私有的上下文: EC(V),把解析出来的props「含children」 传递进来「但是被冻结了」,对函数返回的JSX元素「virtualDOMJ进行渲染。当我们点击按钮的时候,会把绑定的小函数执行:修改上级上下文EC(V)中的变量,私有变量值发生了改变,但是"视图不会更新"=>也就是,函数组件第一次渲染完毕后,组件中的内容,不会根据组件内的某些操作,再进行更新,所以称它为静态组件

除非:在父组件中再次调用这个组件,然后传递不一样的数据进去!!!!!

所以我们就要通过类组件创建动态组件!!!!!!


类组件

创建一个构造函数(类),要求必须继承React。Component/PureComponent这个类

import React from "react" ;
class Vote extends React.Component{
}
export default Vote;

必须给当前类设置1个render的方法「放在其原型上」:在render方法中,返回需要渲染的视图

创建视图:

在这里插入图片描述

那么如何拿到这些数据????title之类的

一些关于class的基础知识:

在这里插入图片描述


继承的原理
在这里插入图片描述
在constructor里面一定要有super!!!

在这里插入图片描述
如果自己不写construct,那么就会自动认为添加下面这个

在这里插入图片描述

拿数据:

首先回顾渲染的时候:

在这里插入图片描述

render函数在染的时候,这里的render是index.js里面的!!!
如果type是:
1.字符串:创建一个标签
2.普通函数:把函数执行,并且把props传递给函数
3.构造函数:把构造函数基于new执行「也就是创建类的-个实例」,也会把解析出来的props传递过去,每调用一次类组件都会创建单独的实例,把类组件中编写的render执行,如果不写render函数,在new的时候会把render执行,没有render就会报错,注意这个类组件中的render和index.js文件中的render是不一样的!!!!

现在我们来分析分析调用类组件「new Vote({…})」 开始,类组件内部发生的事情:

1.设置规则校验

规则校验后才会初始化我们的属性

2.初始化属性

方案1:
在这里插入图片描述

这里必须调用super,具体原因看上面的继承原理

方案2:
即便我们自己不再constructor中处理「或者constructor都没写」, React内部也会把传递的props挂 载到实例上;所以在其他的函数中,只要保证this是实例,就可以基于this . props获取传递的属性!同样this. props获取的属性对象也是被冻结的{只读的} 0bject.isFrozen( this. props)->true

在这里插入图片描述

3.初始化状态

初始化:

状态:后期修改状态,可以触发视图的更新,进行绑定数据!!!
需要手动初始化,如果我们没有去做相关的处理,则默认会往实例上挂载1个state, 初始值是null => this. state=null

在这里插入图片描述

如何触发我们的属性更新:

在这里插入图片描述

??这么做会更新吗,不会!!!!

因为这样做相当于let supNum=this.state.supNum我们修改num相当于修改supNum这个私有变量的值,但是我们应该修改this.state.supNum,让状态值赋给变量值

在这里插入图片描述
那么这样做会更新视图吗???
也不会,因为我们只修改了状态的值并没有触发视图的更新!!!react不像vue那样会劫持数据

4.让视图更新

方案1:this.setState(partialState)

想让视图更新,我们需要基于React.Component.prototype提供的方法操作:
this.setState(partialState)既可以修改状态,也可以让视图更新’

在这里插入图片描述

方案2:forceUpdata()强制更新

在这里插入图片描述

5.触发周期函数componentWillMount

可以理解为生命周期钩子!!!!触发componentWillMount周期函数时期:组件第一次渲染之前

6.触发render

7.触发周期函数componentWillMount
第一次染完毕已经把virtualDOM变为真实DOM了

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

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

相关文章

信道容量详解

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道容量信道容量的…

Django--创建项目与app的初步认识

目前我是想学习Django来搭建一个网站,记录一下我学初学的过程与遇到的问题。 我直接使用pycharm来创建一个Django项目,就不用在终端输入命令行的方式创建虚拟环境。 在终端输入,python manage.py runserver,点击连接web页面进行测…

为什么说python里面函数参数的默认值最好不要使用可变类型

之前发布过Python中函数的介绍:Python中函数的介绍 ,今天来做一个小小的补充说明:为什么说python里面函数参数的默认值最好不要使用可变类型 Python中,函数参数的默认值是在函数定义时计算的,而不是在每次函数调用时计…

机器人与外星人的对话:中国传统哲学的精髓是什么?

一天,机器人Robot和外星人Vick相遇,他俩聊了很多,主要是关于中国传统哲学的,下面是他俩的对话记录。 R:很多人表示他们很痛苦,禅师说那是因为“无明”,外星人,你怎么看? …

【P58】JMeter 简单数据写入器(Simple Data Writer)

文章目录 一、简单数据写入器(Simple Data Writer)参数说明二、准备工作三、测试计划设计 一、简单数据写入器(Simple Data Writer)参数说明 可以将原始数据直接保存到文件 使用场景:一般与 HTML 报告配合使用 使用…

【Python文本处理】基于运动路线记录GPX的文件解析,及对经纬度坐标的数学模型运动速度求解

【Python文本处理】基于运动路线记录GPX的文件解析,及对经纬度坐标的数学模型运动速度求解 解析 GPX文件格式 GPX文件本身其实就是坐标、海拔、时间、心率等综合性的xml文件 如图: 海拔:ele 时间:time 心率:heartr…

【用pytorch进行LSTM模型的学习】

用pytorch进行LSTM模型的学习 LSTM模型用pytorch,采用LSTM对seaborn数据集做预测基本步骤数据的观察特殊数据处理数据归一化模型的构建与选择模型的保存 飞机航班流量预测示例 LSTM模型 LSTM模型长下面这样,主要用在时间序列的预测,具有比RN…

5Why分析法

5Why分析法 由丰田公司的大野耐一提出的对一个问题点连续以5个“为什么”来自问,以追究其根本原因的分析方法。 模型介绍 所谓5Why分析法,又称“5问法”,也就是对一个问题点连续以5个“为什么”来提问,以追究其根本原因。虽为5个…

代码随想录第53天

1.最长公共子序列: 红字的问题都是和最长重复子数组那题的代码进行比较的出来的 动规五部曲分析如下: 确定dp数组(dp table)以及下标的含义 dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串tex…

solidity之智能拍卖案例

文章目录 实现一个简易的拍卖状态变量定义和初始化竞拍功能结束竞拍代码 实现一个简易的拍卖 角色分析:4类角色(拍卖师actioneer,委托人seller,竞买人bidder,买受人buyer) 功能分析:拍卖的基本…

Shell脚本攻略:Linux防火墙(一)

目录 一、理论 1.安全技术 2.防火墙 3.通信五元素和四元素 4.总结 二、实验 1.iptables基本操作 2.扩展匹配 3. 自定义链接 一、理论 1.安全技术 (1)安全技术 ①入侵检测系统(Intrusion Detection Systems)&#xff1…

汽车电子AUTOSAR之BswM模块

目录 前言 正文 总体设计框架 模式仲裁过程 模式控制过程 模式仲裁 模式请求来源(ModeRequestPorts) 模式条件(ModeCondition) 逻辑表达式(LogicExpressions) 模式规则(ModeRules) 模式规则的初始化 模式控制 模式控制基本流程 模式行为 常用函数接口 前言 首先&…

Dependency not found解决方案(Springboot,绝对有效)

目录 问题描述解决方案systemPathmvn install 问题描述 今天在弄一个项目的依赖的时候,easyexcel 的依赖就是下载不了,虽然我的 Maven 配置没问题。 依赖:    Maven 配置:    我切换了几个版本,也无法从镜像下…

git diff去除^M的方法

一,简介 本文主要介绍在git修改的时候,修改文件后,git diff查看修改内容时,发现修改的地方每行结束的地方都会有“^M”,很影响查看。故今天分享一种去除“ ^M”显示的方法,供参考。 二,问题原…

案例29:基于Springboot医疗挂号系统开题报告设计

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包

在Portraiture有非常强大的手动功能,可以为用户进行手动调整照片中的皮肤区域以达到更加完美的效果,软件还支持同时导入上千张照片,用户可以通过自动识别照片中的人脸从而依照自己的风格进行批量处理十分的方便快捷。 最新版本Portraiture 4…

空气污染气象学期末复习笔记

空气污染气象学 (一)研究什么 运用气象学方法研究空气污染物自排放源进入大气层后的散布规律,核心是研究大气输送和扩散 (二)大气污染 大气污染是指由于人类活动或自然过程引起某种物质进入大气中,呈现出足…

Mysql数据库入门基础篇--mysql 多表查询

【Mysql数据库入门基础篇--mysql 多表查询 🔻一、mysql 多表查询1.1 🍃 7种sql joins 的实现1.2 🍃 错误写法---笛卡尔积错误1.3 🍃 正确的多表select写法 🔻二、内连接( inner) join🔻三、 外连接&#xf…

【LeetCode】23. 合并 K 个升序链表

23. 合并 K 个升序链表(困难) 方法一:顺序合并 思路 ListNode* mergeTwoLists(ListNode *a, ListNode *b) {if ((!a) || (!b)) return a ? a : b;ListNode head, *tail &head, *aPtr a, *bPtr b;while (aPtr && bPtr) {if (…

【第十期】Apache DolphinScheduler 每周 FAQ 集锦

点击蓝字 关注我们 摘要 为了让 Apache DolphinScheduler 的广大用户和爱好者对于此项目的疑问得到及时快速的解答,社区特发起此次【每周 FAQ】栏目,希望可以解决大家的实际问题。 关于本栏目的要点: 本栏目每周将通过腾讯文档(每…