React类组件

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'))

        修改后的代码 

        就会发现比上面的代码会有所简单,并且也和我们在vue中所写的代码风格类似

        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的问题。才能完成代码的最终开发

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

括号生成(力扣)递归 JAVA

目录 题目描述&#xff1a;纯递归解法&#xff1a;递归 回溯&#xff1a; 题目描述&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a…

子集 (力扣)数学推理 JAVA

给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[1],[2],[1,2],[3],[…

Unity/Shader 零碎知识点

坐标系 Unity使用的是左手坐标系&#xff1b;观察空间&#xff0c;通俗来讲就是以摄像机为原点的坐标系&#xff0c;摄像机的前向是z轴的负方向&#xff0c;与模型和世界空间中的定义相反&#xff0c;z轴的坐标减少意味着场景深度的增加 点积 abba|a||b|cos<a,b> 结果为常…

邮票面值-2022年全国青少年信息素养大赛Python国赛第5题

[导读]&#xff1a;超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲&#xff0c;这是超平老师解读Python编程挑战赛真题系列的第7讲。 全国青少年信息素养大赛&#xff08;原全国青少年电子信息智能创新大赛&#xff09;是“世界机器人大会青少年机器人设计…

Spring Boot原理分析 | SpringApplication、Yaml、Properties

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Spring Boot Spring开源框架&#xff0c;轻量级的Java开发框架&#xff0c;解决企业级应用开发的复杂性而创建&#xff0c;简化开发 基于POJO的轻量级和最小侵入型编程…

Kafka入门,漏消费和重复消费, 消费者事务,数据积压(二十四)

漏消费和重复消费 重复消费&#xff1a;已经消费了数据&#xff0c;但是offset没提交。 漏消费&#xff1a;先提交offset后消费&#xff0c;有可能会造成数据得漏消费 消费者事务 如果向完成consumer端得进准一次性消费&#xff0c;那么需要Kafka消费端将消费过程和提交offs…

【Accumulate】Gitee解决每次推送输入账户密码问题

【前言】 每次建立私人仓库后&#xff0c;一推送就得输入账户密码&#xff0c;真的巨烦人啊。 【解决】 step1&#xff1a; 绑定私匙&#xff1a; 配置Git_犟小孩的博客-CSDN博客 step2&#xff1a; 每次绑定远程仓库的时候&#xff0c;使用SSH绑定 如果已经绑定过了&…

YoloV2

时间线 Motivation Yolo-v1是在检测精度尚可的前提下达到了实时检测&#xff0c;同年的SSD检测速度略慢但检测精度远高于Yolo-v1&#xff0c;因此&#xff0c;Yolo-v2则是着眼于检测得更快更准&#xff0c;同时它利用WordTree创造性地将Imag…

回归预测 | MATLAB实现WOA-DBN鲸鱼算法优化深度置信网络的多输入回归预测

回归预测 | MATLAB实现WOA-DBN鲸鱼算法优化深度置信网络的多输入回归预测 目录 回归预测 | MATLAB实现WOA-DBN鲸鱼算法优化深度置信网络的多输入回归预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于鲸鱼算法优化深度置信网络(WOA-DBN)的数据回归预测&…

vim的使用方法及相关按键

目录 一、安装vim 二、vim的使用 1.打开vim 2.vim的四种模式使用 &#xff08;1&#xff09;命令模式&#xff08;快捷键的使用&#xff09; &#xff08;2&#xff09;编辑模式 &#xff08;3&#xff09;末行模式 &#xff08;4&#xff09;可视化模式 一、安装vim …

虹科方案 | Redis Enterprise:适用于任何企业的矢量数据库解决方案

用户希望他们遇到的每个应用程序和网站都具有搜索功能。然而&#xff0c;超过80%的业务数据是非结构化的&#xff0c;以文本、图像、音频、视频或其他格式存储。因此&#xff0c;我们需要一种跨非结构化数据的搜索方式。 什么是矢量数据库&#xff08;vector database&#xff…

基于深度学习的高精度老虎检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度老虎检测识别系统可用于日常生活中或野外来检测与定位老虎目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的老虎目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

uniapp学习之【uniapp的返回事件 onBackPress 在微信小程序中不生效的问题】

uniapp 的返回事件 onBackPress 在微信小程序中不生效的问题 场景&#xff1a;页面中点击左上角的返回按钮,监听返回操作,页面返回前执行了一些操作, uniapp 页面生命周期中有 onBackPress ,因此将操作写在了 onBackPress () 页面生命周期钩子当中, H5 测试一切正常,但是微信开…

集合面试题--LinkedList数组

目录 单向链表 介绍 时间复杂度分析 双向链表 时间复杂度分析 总结 ArrayList和LinkedList的区别是什么&#xff1f; 单向链表 介绍 时间复杂度分析 双向链表 时间复杂度分析 总结 ArrayList和LinkedList的区别是什么&#xff1f;

某网站JS加密、OB混淆与CSS反爬实战分析

1. 写在前面 最近一段时间接触了一些小说网站的业务。发现很多的小说网站&#xff0c;甚至一些小站它们的安全防护措施做的都很到位&#xff01;例如上次说到的的五秒盾也是存在于一个小说小站。今天要讲的这个网站它集JS加密、ob混淆、CSS反爬于一体 目标站点&#xff1a; aH…

【javaEE面试题(四)线程不安全的原因】【1. 修改共享数据 2. 操作不是原子性 3. 内存可见性 4. 代码顺序性】

4. 多线程带来的的风险-线程安全 (重点) 4.1 观察线程不安全 static class Counter {public int count 0;void increase() {count;} } public static void main(String[] args) throws InterruptedException {final Counter counter new Counter();Thread t1 new Thread(()…

王道考研计算机网络第五章知识点汇总

5.1.1 传输层概述 复用&#xff1a;好比家里面每个人都要写信&#xff0c;向信箱里面投入信件&#xff0c;然后由邮递员取走。 分用&#xff1a;就是每个人都收到了各自的回信&#xff0c;然后从信箱中取走各自的信 5.2 UDP协议 注意&#xff1a;用户数据报和检验和都是指的整…

深度剖析线上应用节点流量隔离技术

作者&#xff1a;谢文欣&#xff08;风敬&#xff09; 为什么要做流量隔离 源于一个 EDAS 客户遇到的棘手情况&#xff1a;他们线上的一个 Pod CPU 指标异常&#xff0c;为了进一步诊断问题&#xff0c;客户希望在不重建此 Pod 的情况下保留现场&#xff0c;但诊断期间流量还…

chatGPT如何开启 Browsing 功能,实现即时联网查询?

Openai 为每一个 chatGPT Plus 用户都开放了 Browsing 和 plugins 功能。 前者可以在 ChatGPT 觉得有必要的时候&#xff08;比如你问它今天的新闻&#xff09;&#xff0c;自动联网查询&#xff0c;后者是第三方开发者开发的插件&#xff0c;数量繁多&#xff0c;可以解决各种…

【Distributed】分布式ELK日志文件分析系统

文章目录 一、ELK 概述1. 为什么要使用 ELK2. 完整日志系统基本特征3. ELK 简介3.1 ElasticSearch&#xff08;ES&#xff09;3.2 Kiabana3.3 Logstash3.4 其它组件Filebeat缓存/消息队列Fluentd 4. ELK 的工作原理5. Linux 系统内核日志消息的优先级别 二、 部署 ELK 集群服务…