React类组件

news2024/12/26 21:45:37

1. React组件

        将页面按照界面功能进行拆分,每一块界面都拥有自己的独立逻辑,这样可以提高项目代码的可维护性。其中React组件分为两种,一种是类式组件,一种是函数式组件。这里我们将的是比较常用的类式组件,但是在后续的hooks中函数式组件也能完成类式组件的功能。

2. 何为类

        在Java中我们可以通过声明class来将一些属性或者方法放在一起。和JS中的对应有一点相同,在React中我们可以通过该方法来声明一个类式组件。

        class Person extends React.Component{
            render() {
                return <h1 onClick={this.weather}>今天天气很凉爽</h1>
            }
        }
        ReactDOM.render(<Person/>,document.getElementById('root'))
  1.  其中我们需要住的是,我们在构建类的时候需要继承我Component来进行构造。
  2.  其中的类的首字母要大写,和函数式组件一样。在 React进行渲染时,首先React会在渲染标签时查看,如果我们所定义的标签的首字母是小写,则会将其看作html中的标签,如果是大写,则会去寻找我们所定义的组件。然后通过new 进行实例话,然后通过调用实例的原型上的render方法来进行渲染。通过其返回的虚拟DOM转化为真实DOM来进行页面的呈现。    

3.构造器 

        由于类组件上会有三大属性。其中的status和在vue中的data类似,都是用来进行数据驱动的模块。但是我们会发现为什么我们定义的类上的null。因此我们需要通过调用super来进行属性的复值。

 

        我们通过类中的super调用父类的构造器来进行调用。但是你会发现这中写法会比较麻烦,如果后续在开发过程中每次创建类组件时,总会去调用父类的组件,这样会比较繁琐。因此在这里我们可以运用如果在类中直接声明属性并赋值。那么这个对象也会拥有对应的值 

        class Person extends React.Component{
            constructor(props){
                super(props)
                this.state = {
                    weacher:'good'
                }
            }
            render() {
                console.log(this)
                return <h1>今天天气很凉爽</h1>
            }
        }
        ReactDOM.render(<Person/>,document.getElementById('root'))

        修改后的代码 

        就会发现比上面的代码会有所简单

        class Person extends React.Component{
            state = {
                weather:'good'
            }
            render() {
                console.log(this)
                return <h1>今天天气很凉爽</h1>
            }
        }
        ReactDOM.render(<Person/>,document.getElementById('root'))

 

4.如何绑定事件 

         在React中我们可以通过很多方式来进行事件的绑定。addEventListener、onclick、或者直接在html中进行事件的绑定都可以,那么在React中我们到底选择哪种形式呢?这里我们采用第三中形式。像如下这样。但是这样写对不对呢?答案是肯定不对的。例如我们查看对应的浏览器可以发现。我们会发现我们还没有点击的时候,页面就触发了点击事件。那是因为在render渲染的时候,发现我们所绑定的函数没有返回的回掉,因此将underfined作为函数的回掉。并且会执行我们所定义的函数,因此无论我们怎么点击都无效过。因为我们在绑定函数的时候不能写括号。

        class Person extends React.Component{
            state = {
                weather:'good'
            }
            render() {
                console.log(this)
                return <h1 onClick={this.tellWeacher()}>今天天气很凉爽</h1>
            }
            tellWeacher(){
                console.log(123123)
            }
        }
        ReactDOM.render(<Person/>,document.getElementById('root'))

 5.属性的修改

        由于在React中会开启严格模式,因此我们可以使用箭头函数来避免this的指向问题,例如下面。如果我们不简写。那么就需要通过bind来进行this的指向问题的修改,因为bind会返回修改this指向后的函数。这样我们就可以实现属性的修改了。

        class Person extends React.Component{
            // constructor(props){
            //     super(props)
            //     this.state = {
            //     weather:true
            //     }
                    //  右侧的是通过其实例对象上没有tellWeacher方法,那么则通过原型链来寻找,然后通过bind来进行this的指向问题的修改,
                    // 并且通过bind返回的是一个函数,然后将这个函数
            //     this.tellWeacher = this.tellWeacher.bind(this)
            // }
            state = {
                weather:true
            }
            render() {
                const {weather} = this.state
                return <h1 onClick={this.tellWeacher}>今天天气很凉爽,我说天气很 {this.state.weather ? '好' : '坏'} </h1>
            }
            tellWeacher = () =>{
                console.log(this)
                const weather = this.state.weather
                this.setState({weather:!weather})
                console.log(this)
            }
        }
        ReactDOM.render(<Person/>,document.getElementById('root'))

6.总结

        相对于vue。其实react实现相应功能会比较复杂,其中尤其是this指向问题 比较麻烦。因此在实际开发中需要清楚this的问题。才能完成代码的最终开发

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

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

相关文章

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(六)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践&#xff0c;帮助开发组织减少发布的软件中的漏洞数量&#xff0c;减少利用未检测到或未解决的漏洞的潜在影响&#xff0c;从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

dedecms后台数据库备份迁移流程

dedecms网站正常使用需要两部分,网站文件和数据库.两者缺一不可. dedecms上传网站文件后,还要导入数据库,如果您只有网站后台备份,没有其他格式sql备份文件,请按照下面流程重装dedecms,并操作恢复数据库 . 需要选确定/wwwroot/data/backupdata/下是否有对应备份 如不存在备份…

机器学习面试题 - 模型评估2

目录标题 8、为什么在一些场景中要使用余弦相似度而不是欧氏距离&#xff1f;9、余弦距离是否是一个严格定义的距离?10、在对模型进行过充分的离线评估之后&#xff0c;为什么还要进行在线A/B测试&#xff1f;11、如何进行线上A/B测试&#xff1f;12、如何划分实验组和对照组1…

ChatGPT落地场景探索-数据库与大模型

目录 openGauss介绍 openGauss介绍 数据库与大模型 openGauss介绍 大模型与数据库 大模型为数据库带来的机遇 大模型解决数据库问题的挑战 数据库为大模型带来的价值 大模型大模型的发展趋势 趋势产品&#xff1a;Chat2DB 简介 特性 生产应用&#xff1a;基…

运输层:TCP超时重传时间的选择

1.运输层&#xff1a;TCP超时重传时间的选择 笔记来源&#xff1a; 湖科大教书匠&#xff1a;TCP超时重传时间的选择 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 若将超时重传时间RTO < \lt < 报文段0的往返时间RTT0&#xff0c;则会出现…

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、农业、大气等领域数据分析

查看原文>>> ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、农业、大气等领域数据分析 【内容简述】&#xff1a; 注&#xff1a;请提前自行配置上课环境 【其它相关推荐】&#xff1a; GEE遥感云大数据林业应用典型案例实践及GPT模型应用 基…

【Ubuntu】apt 更换阿里源

Ubuntu apt 更换阿里源 1.Ubuntu apt 更换阿里源1.1 找到阿里官方相关镜像1.2 找到apt的源管理文件1.3 使用命令替换其源地址1.4 刷新源信息1.5 Failed to fetch http://xxxxxxx Temporary failure resolving ‘mirrors.aliyun.com‘ 1.Ubuntu apt 更换阿里源 1.1 找到阿里官方…

Java 设计模式 随笔1 监听器/观察者

0. 不由自主&#xff0c;恍恍惚惚&#xff0c;又走回头路&#xff0c;再看一眼有过的幸福… 太棒了流沙!!! 0.1 引用 https://blog.csdn.net/majunzhu/article/details/100869562 ApplicationEvent事件机制源码分析 单机环境下优雅地使用事件驱动进行代码解耦 1. JDK 1.1 …

LAXCUS分布式操作系统总体概述

本文回答用户问的一些情况&#xff0c;因为问题主要集中LAXCUS分布式操作系统的产品、市场、发展层面&#xff0c;技术问题倒是不多&#xff0c;我在这里做个总体概述的回答吧。 LAXCUS分布式操作系统是基于分布式运行环境构建的【数存算管】超融合一体化平台&#xff0c;处理…

Excel 合并单元格筛选时只出现首行

一、问题描述 如果对合并单元格直接筛选&#xff0c;只能筛选出第一个单元格的值 二、原因分析&#xff1a; Excel筛选单元格时&#xff0c;遇到不连续区域&#xff08;即中间有空白单元格&#xff09;会识别不到后续内容&#xff1b; 合并单元格后&#xff0c; 除首行外&…

测试中那些悲桑的。。。

今天不讲“锅”&#xff0c;也不讲知识&#xff0c;只聊聊我们在测试中那些悲桑的故事。鉴于过于真实&#xff0c;请新人慎看。 - 1 - 实验室环境中测试顺利进行&#xff0c; 一到发版时刻&#xff0c; 哦豁&#xff0c;出现了一个惊天大bug&#xff01; 通宵走起~ - 2 - 辛…

【机器学习核心总结】什么是RNN(循环神经网络)

什么是RNN(循环神经网络) 循环神经网络(Recurrent Neural Network)&#xff0c;在识别图像时&#xff0c;输入的每张图片都是孤立的&#xff0c;认出这张图片是苹果&#xff0c;并不会对认出下一张图片是梨造成影响。 但对语言来说&#xff0c;顺序是十分重要的&#xff0c;“…

六、计算机视觉相关内容

文章目录 前言一、图像增广1.1 常用的图像增广1.1.1 翻转和裁剪1.1.2 变换颜色1.1.3 结合多种图像增广方法 二、微调2.1 微调的步骤2.2 具体案例 三、 目标检测和边界框3.1 边界框 四、锚框五、多尺度目标检测六、目标检测数据集七、单发多框检测(SSD)八、区域卷积神经网络(R-C…

【NLP】分步图解transformer 数学示例

一、说明 我知道transformer 架构可能看起来很可怕&#xff0c;你可能在网上或博客上遇到了各种解释。但是&#xff0c;在我的博客中&#xff0c;我将通过提供一个全面的数值示例来努力澄清它。通过这样做&#xff0c;我希望简化对变压器架构的理解。 二、输入和位置编码 让我…

网络编程-day3

UDP服务器&#xff1a; UDP客户端&#xff1a;

go-redis的基本使用

Golang操作Redis 安装go-redis //redis 6 go get github.com/go-redis/redis/v8 //redis 7 go get github.com/go-redis/redis/v9golang连接redis import "github.com/go-redis/redis/v8" var rdb *redis.Clientfunc init() {rdb : redis.NewClient(&redis.Opt…

云原生之深入解析Prometheus AlertManager的实战操作

一、概述 Prometheus 包含一个报警模块&#xff0c;就是 AlertManager&#xff0c;Alertmanager 主要用于接收 Prometheus 发送的告警信息&#xff0c;它支持丰富的告警通知渠道&#xff0c;而且很容易做到告警信息进行去重、降噪、分组等&#xff0c;是一款前卫的告警通知系统…

Android Studio实现内容丰富的安卓校园二手交易平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号038 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看二手商品…

[学习笔记] 扩散模型 Diffusion

前置知识-从深度生成模型、隐变量、VAE开始 机器学习是人工智能的一种&#xff0c;它是一种通过利用数据&#xff0c;训练出模型&#xff0c;然后使用模型预测的一种方法。 机器学习分为监督学习、无监督学习和强化学习&#xff0c;这是根据数据训练方式分类的&#xff0c;通俗…

leetcode 100. 相同的树

2023.7.6 这题类似于树的对称性这道题&#xff0c;下面给出递归和迭代两种解法&#xff1a; 递归法&#xff1a; class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q) {if(pnullptr && qnullptr) return true;if(pnullptr && q!nullptr || p…