React学习笔记三-模块与组件的理解

news2024/12/30 1:46:16

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第三篇,主要介绍react中的模块与组件。

目录

1.模块与组件

1.1模块

1.2组件

1.3模块化

1.4组件化

2.React面向组件编程

2.1函数式组件

 2.2类组件

2.2.1类知识的复习

2.2.2类式组件的学习


1.模块与组件

1.1模块

理解:向外提供特定功能的js程序,一般就是一个js文件。

为什么要拆成模块:随着业务逻辑的增加,代码越多越复杂。

作用:复用js,简化js的编写,提高js的运行效率。

1.2组件

理解:用来实现局部功能效果的代码和资源的集合(html,css,image等等)

为什么使用组件:一个界面的功能很复杂,将一群复杂的功能拆分为一个个组件,再使用组件可以组成这个复杂的功能界面。

作用:复用编码,简化项目编码,提高运行效率。

1.3模块化

当应用的js都以模块来编写的,那这个应用就是一个模块化的应用。

1.4组件化

当应用是以多组件的方式实现,那么这个应用就是一个组件化的应用。

2.React面向组件编程

2.1函数式组件

1.在ReactDOM.render生成虚拟dom的时候,因为jsx语言会把小写字母开头的dom名字当作html标签,大写字母开头的dom名字当作组件。所以我们必须将函数式组件的名字首字母大写。

2. ReactDOM.render(<MyComponent/>, 参数2),在使用ReactDOM.render生成虚拟dom的时候,我们函数式组件的名字要用<>包起来,而且必须是闭合的标签。

3.执行ReactDOM.render后,React会解析组件标签,找到MyComponent这个组件,然后发现此组件是被函数定义的,然后调用该函数,将返回的虚拟dom转换为真实dom展示在页面上。

4.babel在编译后开启严格模式,所以原本指向window的this,指向了undefined。

代码如下:

<div id="test"></div>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <script type="text/babel">
        //1.创建函数式组件
        function MyComponent() {
            console.log(this);//此处的this是undefined,因为babel在编译后开启了严格模式
            return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
        }
        //2.渲染组件到页面
        ReactDOM.render(<MyComponent/>, document.getElementById('test'))
        /*
            执行了ReactDOM.render之后,
            1.React解析组件标签,找到了MyComponent组件
            2.发现组件是使用函数定义的,然后调用该函数,将返回的虚拟dom转为真实dom,随后展示在页面中
        */

效果如下:

 2.2类组件

2.2.1类知识的复习

1.创建一个类

代码如下:

//创建一个Person类
        class Person{
            //构造器方法
            constructor(name,age){
                this.name = name
                this.age = age
            }
            //普通方法,speak方法放在了Person的原型对象上,供实例使用
            //通过person实例调用speak时,speak中的this指向person实例
            speak(){
                console.log(`我的名字是${this.name},我的年龄是${this.age}`);
            }
        }
        //创建Person类的实例对象、
        const p1 = new Person('tom',28)
        const p2 = new Person('jerry',29)
        console.log(p1);
        console.log(p2);
        p1.speak()
        p2.speak()

2.类的继承

 //创建一个Student类,继承于Person类
        class Student extends Person{
            constructor(name,age,grade){
                super(name,age)//super关键字,用于继承父类的属性,必须放在第一行
                this.grade = grade
            }
            //speak方法是父类的方法,在子类依然可以使用。从子类Student的原型链依次向上查找,在父类的原型中找到speak方法并调用
            //重写从父类继承的方法,那么speak方法在子类的原型中就已存在,在从子类原型链向上查找的时候,在子类原型中找到,就会直接调用停止查找。
            speak(){
                console.log(`我的名字是${this.name},我的年龄是${this.age},我的年纪是${this.grade}`);
            }
        }
        const s1 = new Student('张三',15,'大一')
        console.log(s1);
        s1.speak()

3.类知识总结

             1.类中的构造器不是必须写的,要对实例做一些初始化的操作,如添加指定属性时才写

            2.如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的

            3.类中所定义的方法,都是放在了类的原型对象上,供实例去使用

2.2.2类式组件的学习

1.创建类式组件。

        我们去继承React的内置类React.Component来创建一个类MyComponent。

2.使用render函数。

        renader是放在类的原型对象上,供我们创建的MyComponent实例使用。在render函数被调用的时候,指向MyComponent的实例对象。我们可以在代码中log一下this,来观察this的指向。

打印输出结果:

 3.在render返回出虚拟dom,虚拟dom会被转换成真实dom。

4.渲染组件到页面,写了组件标签后react会自动生成一个实例

        在ReactDOM.render(<MyComponent/>, document.getElementById('test'))中,我们写了一个

 <MyComponent/>,react检测到此是一个组件,然后根据名字找到相应的类式组件,并自动根据此组件自动生成一个实例。

代码如下:

<div id="test"></div>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <script type="text/babel">
        //1.创建类式组件  如果创建类式组件,必须去继承React.Component,此为react内置类
        class MyComponent extends React.Component{
            render(){
                //renader是放在类的原型对象上,供MyComponent实例使用
                //render中的this在被调用时指向MyComponent的实例对象,MyComponent的组件实例对象
                console.log('reder中的this',this);
                return <h2>我是用类式定义的组件(适用于【复杂组件】的定义)</h2>
            }
        }
        //2.渲染组件到页面,写了组件标签后react会自动生成一个实例
        ReactDOM.render(<MyComponent/>, document.getElementById('test'))
        /*
            执行了ReactDOM.render()后发生了什么?
            1.React解析组件标签,找到MyComponent组件
            2.发现组件是类定义的,随后new出该类的实例,并通过该实例调用到原型上的render方法
            3.将renader返回的虚拟DOM转换为真实DOM,随后呈现到页面上
        */
    </script>

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

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

相关文章

防火墙(一)

防火墙知识 一、iptables概述二、四表五链四表五链iptables防火墙的使用方法 三、示例操作四、规则的匹配通用匹配&#xff1a;隐含匹配&#xff1a;端口匹配&#xff1a; --sport源端口、--dport目的端口TCP标志位匹配&#xff1a;ICMP类型匹配&#xff1a;显示匹配&#xff1…

Windows 安装MySQL 8.0 超详细教程(mysql 8.0.30)

目录 一、删除以前安装的MySQL服务 1、查找以前是否装有mysql 2、删除mysql &#xff08;1&#xff09;停止mysql服务&#xff1a; &#xff08;2&#xff09;删除mysql服务&#xff1a; 3.检查mysql是否已删除 二、下载mysql二进制包 三、解压二进制包&#xff0c;编辑…

一图看懂 setuptools 模块:一个功能齐全、积极维护且稳定的库,旨在方便打包Python项目,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 setuptools 模块&#xff1a;一个功能齐全、积极维护且稳定的库&#xff0c;旨在方便打包Python项目&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;…

第一个 Rust 程序

目录 必要知识代码示例 Cargo 教程[Rust 输出到命令行](https://www.runoob.com/rust/rust-println.html)资料 必要知识 Rust 语言代码文件后缀名为 .rs 使用 rustc 命令编译 .rs 文件 rustc runoob.rs # 编译 runoob.rs 文件编译后会生成 可执行文件 例如&#xff1a; …

『python爬虫』26. selenium与超级鹰处理复杂验证码的处理(保姆级图文)

目录 1. 图片选择类验证码2. 滑块验证码3. 滑块出错&#xff0c;不加载总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 1. 图片选择类验证码 我们这里查看超级鹰文档 图片验证码返回的是一个 dic 结构为 x1,y1…

【SAM系列】An Alternative to WSSS? An Empirical Study of SAM on WSSS Problems

论文链接&#xff1a;https://arxiv.org/pdf/2305.01586.pdf 论文代码&#xff1a;暂无 目的 WSSS旨在弱标签的情况下&#xff0c;生成高质量的分割伪标签&#xff0c;然后用于全监督的语义分割训练。本文探索用SAM来生成伪标签来替代WSSS方案。 为什么不直接用SAM分割而利用…

《面试1v1》synchronized

源码都背下来了&#xff0c;你给我看这 我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 你好&#xff0c;我看到你的简历上写着你熟悉 Java 中的 “synchronized” 关键字。你能给我讲讲它的作…

chatgpt赋能Python-python3反转字符串

Python3反转字符串技巧&#xff1a;让你的代码更高效&#xff01; 你是否曾经在编程时需要对字符串进行反转&#xff0c;但却不知从何入手&#xff1f;Python3提供了简单易用的方法&#xff0c;帮助你更快地反转字符串。本文将介绍Python3中字符串反转的方法以及如何在代码中利…

chatgpt赋能Python-python3如何安装numpy

如何安装numpy&#xff1f; 介绍 在Python编程中&#xff0c;NumPy是使用最广泛的库之一。NumPy是数学和科学计算中的核心模块&#xff0c;主要用于处理数字数据&#xff0c;包括数组计算、线性代数、傅里叶变换、随机数生成等任务。在Python编程中&#xff0c;使用NumPy可以…

chatgpt赋能Python-python3小游戏

Python3小游戏&#xff1a;为你的休闲时光增添乐趣 如果你正处于寻找一款简单好玩的小游戏&#xff0c;那么Python3小游戏将是你的不二之选。作为一名有10年Python编程经验的工程师&#xff0c;我可以说Python3小游戏是一款非常有趣、挑战性适中、易于上手的游戏。接下来&…

工作流 jbpm(图文并茂)

文章目录 1 工作流概述2 jBPM概述3 jBPM开发环境搭建及其配置3.1 准备工作3.2 搭建jBPM开发环境3.3 加入jar包 4 系统数据库表介绍4.1 建表4.2 数据库逻辑关系4.2.1 资源库与运行时的表4.2.2 历史数据表 4.3 表结构4.4 流程操作与数表交互说明 5 相关概念6 流程图说明6.0 快速上…

【学习笔记】Rider调试unity【 联调、断点调试等】(决定弃用vscode了)

目录 一 弃用vscode原委二 Rider调试Unity2.1 启动调试2.2 pausepoint 暂停点2.2.1 使用pausepoint2.2.2 pausepoint&#xfeff;与breakpoint的区别 2.3 不同run configuration区别 三 Rider编辑3.1 补充 四 总结 转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.n…

头歌计算机组成原理实验—运算器设计(4)第4关:16位快速加法器设计

第4关&#xff1a;16位快速加法器设计 实验目的 帮助学生理解成组进位产生函数&#xff0c;成组进位传递函数的概念&#xff0c;熟悉 Logisim 平台子电路的概念&#xff0c;能利用前述实验封装好的4位先行进位子电路以及4位快速加法器子电路构建16位、32位、64位快速加法器&a…

Android 12.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(一)

1.前言 在12.0的系统rom定制化开发中,在原生系统SystemUI下拉状态栏的通知栏的背景是白色四角的背景,由于在产品设计中,需要把四角背景默认改成圆角背景,所以就需要分析系统原生下拉通知栏的每条通知的默认背景,然后通过systemui的通知流程,设置默认下拉状态栏UI中的通知…

java+nodejs+vue+python+php家教信息管理系统

任何网友都可以自由地查看、搜索、发布该家教信息平台的信息。该平台是区别于传统的家教中介的服务平台。学生可以免费查看网站上的家教信息&#xff0c;挑选适合自己的家教&#xff1b;教师可以免费查看网站上的需求信息&#xff0c;挑选适合自己的学生&#xff1b;学生可以发…

chatgpt赋能Python-python3安装scrapy

Python3安装Scrapy&#xff1a;提高爬虫效率的关键 如果你正在从事数据科学、数据分析工作&#xff0c;或者需要收集并存储某些特定网站的数据&#xff0c;Scrapy是一个值得尝试的Python3框架。Scrapy是一个开源的Web爬虫框架&#xff0c;可以方便、高效、快速地对数据进行收集…

Rust每日一练(Leetday0005) 罗马数字、公共前缀、三数之和

目录 13. 罗马数字转整数 Roman to Integer &#x1f31f; 14. 最长公共前缀 Longest Common Prefix &#x1f31f; 15. 三数之和 3Sum &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日…

Qt/QML编程学习之心得:颜色编码方案RGB+YUV+HSI等(八)

说到Human-Machine Interaction 人机交互界面或者说GUI,那么第一反映可能是窗口、各种控件、各种图片,但是所有这些都还需要一个更底层的内容,那就颜色。不管是窗口还是控件,颜色是其最基本的一个属性。 牛顿三棱镜色散实验,发现光的色彩奥妙:当一束白光通过三棱镜时,它…

chatgpt赋能Python-python3控制摄像头拍照

Python3 控制摄像头拍照 介绍 Python3 是一种高级编程语言&#xff0c;被广泛应用于机器学习、人工智能、Web 开发等领域。控制摄像头拍照是 Python3 中非常常见的需求&#xff0c;例如监控、照片拍摄等等。 如何控制摄像头拍照 在 Python3 中&#xff0c;我们可以利用 Ope…

【高效科研工具(一):chatGPT(各种高效网站大集合)】

高效科研工具&#xff08;一&#xff09;&#xff1a;chatGPT&#xff08;各种高效网站大集合&#xff09; 目录 0、前言 1、chatGPT介绍 2、chatGPT官网 3、各种衍生网站&#xff08;&#x1f929;&#x1f929;&#x1f929;&#x1f929;重头戏&#xff01;&#xff01;&a…