React 学习笔记(5)面对对象中类的复习&类式组件

111 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

类的复习

主要是要实现类的一些基本特点和用法,例如构造器,继承,封装。

类的简单用法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学习React</title>
</head>

<body>
    <div id="test"></div>

    <script type="text/javascript" src="../js/react.development.js"></script>
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/babel">
        class Song{
            //构造器方法
            constructor(province,city){
                this.province = province
                this.city = city
            }
            //一般方法,给实例使用
            sing(){
                console.log(`我是${this.province}的,${this.province}${this.city}的`);
            }
        }
        //实例化对象
        const s1 = new Song('云南','怒江');
        const s2 = new Song('广东','深圳');
        console.log(s1)
        console.log(s2)
        s1.sing();
        s2.sing();
    </script>
</body>

</html>

效果如图: image.png 上面的代码完成了一个类的基本用法,有构造方法,有类方法,下面并实例化了两个类调用了其中的方法,实现了代码复用。

类的继承&重写父类方法

    <script type="text/babel">
        class Song {
            //构造器方法
            constructor(province, city) {
                this.province = province
                this.city = city
            }
            //一般方法
            sing() {
                console.log(`我是${this.province}的,${this.province}${this.city}的`);
            }
        }
        //继承Song类
        class Nation extends Song {
            constructor(province, city, nation) {
                super(province, city)  //继承后给父类处理
                this.nation = nation
            }
            sing() {  //重写从父类继承的方法
                console.log(`我是${this.province}的,${this.province}${this.city}的,${this.city}泸水市,泸水市六库,六库${this.nation}`);
            }
            translate(){
                console.log(`${this.nation}是这样叫,乌鸦叫作阿南,青蛙叫作欧巴,老公叫作搓趴,老婆叫作搓嘛,香菜叫作野穴,红薯叫作阿梦,老虎叫作喇嘛,黄瓜叫作阿布。南瓜叫作阿普,鸡蛋叫作嘛啊耶夫`);

            }
        }
        const n1 = new Nation('云南','怒江','傈僳族')
        console.log(n1)
        n1.sing();
        n1.translate();
    </script>

效果:

image.png

类总结

  • 类中的构造器不是必须写的,要对实例进行一些初始化操作,要添加属性的时候才写。 例如要添加属性的时候不用重写父类的构造函数,复用的时候使用super关键字就可以了
  • 如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的。
  • 类中定义的方法都是放在了类的原型对象上,供实例使用

类式组件

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学习React</title>
</head>

<body>
    <div id="test"></div>

    <script type="text/javascript" src="../js/react.development.js"></script>
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/babel">
       class Translate extends React.Component{
           render(){
               return <h2>我是云南的,云南怒江的</h2>
           }
       }
       ReactDOM.render(<Translate/>,document.getElementById('test'))
    </script>
</body>

</html>

Translate这个类中的render,是在类的原型对象上,供实例使用 React 在ReactDOM.render方法发现组件是使用类定义的,就会new出来一个该类的实例,并通过该实例调用到原型上的render方法,最后才将render返回的虚拟DOM转为真实DOM,渲染页面。

组件三大属性

在Translate.render()方法中打印this,这个this是在Translate的实例对象,也就是Translate组件实例对象 image.png props,refs,state,下篇开始学习React重要属性state