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

news/2024/7/15 20:31:11 标签: react.js, 学习, 笔记

此文章是本人在学习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.niftyadmin.cn/n/340717.html

相关文章

vue3如何选择reactive或ref

前言 在 Vue 3 中&#xff0c;我们可以使用 reactive 和 ref 来创建响应式数据。但是&#xff0c;在实际开发中&#xff0c;我们应该如何选择使用哪种方式呢&#xff1f;本文将从以下几个方面来探讨这个问题&#xff1a; reactive 和 ref 的基本概念和用法&#xff1b;reacti…

C++基础语法——内存管理

1. C/C中的内存管理 我们先看如下一段代码 #include <iostream>using namespace std;int globalVar 1; static int staticGlobalVar 1;void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const ch…

java线程的状态

文章目录 1. 线程的状态2. 验证NEW、RUNNALE和TERMINATED状态3. 验证TIMED_WAITING状态4. 验证BLOCKED状态5. 验证BLOCKED状态 1. 线程的状态 线程在不同的运行时期存在不同的状态&#xff0c;状态信息存在于State枚举类中&#xff0c;如下图&#xff1a; 调用线程有关的方法是…

IT系统维护作业管理办法

IT系统维护作业管理办法是一套用于有效组织和管理IT系统维护作业的规范和流程。以下是一份简洁的IT系统维护作业管理办法的概述&#xff1a; 1. 目标和范围&#xff1a;明确IT系统维护作业的目标和适用范围&#xff0c;例如系统的维护类型和受影响的系统范围。 2. 维护计划&a…

深度学习-第T7周——咖啡豆识别

深度学习-第T7周——咖啡豆识别 深度学习-第T7周——咖啡豆识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 五、搭建CNN网络六、…

phpstorm+xdebug的安装与使用

工具和环境 phpstorm 2018 php5.6 线程安全 xdebug 1.下载和安装xdebug 1.1 查看自己phpinfo信息 比如我这里是php 5.6 &#xff0c;线程安全版本 1.2 xdebug 官网 Xdebug: Historical Releases 根据自己的php版本选择要下载的dll文件 如果是高版本一点的php &#xff…

网络编程 TCP-client

代码 和server一样&#xff0c;先包含头文件、库等 第二步 初始化socket 第三步 定义一个套接字 SOCKET sockClie socket(AF_INET, SOCK_STREAM, 0);if (INVALID_SOCKET sockClie){printf("socket errorNum %d\n", GetLastError());return -1;} 注意&#xff…

MySQL小记——DDL、DML、DQL

目录 数据库概念 关系型数据库 MySQL使用 SQL语言 sql分类 DDL&#xff1a;操作数据库和表 操作数据库 操作表 DML:数据操作语言&#xff0c;用来增删改数据库记录 1.插入数据 2.删除数据 3.修改数据 DQL&#xff1a;查询 条件查询 模糊查询 字段的运算和去重 …