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

此文章是本人在学习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>

猜你喜欢

转载自blog.csdn.net/zhangawei123/article/details/130698492
今日推荐