# 函数式组件
- 适用于【简单组件】的定义 无状态组件 
- 大写命名 
- this 指向 undefined 。因为经过 babel 编译,开启严格模式 'use strict',禁止this 指向 window 
- 原理 执行 - ReactDOM.render(<Demo/>, root)之后- react 解析组件标签,找到 Demo 组件
- 发现组件是使用函数定义的,随后调用函数,将返回的虚拟 DOM 返回,渲染到页面上
 
function Demo() {
    return <div>demo 函数式组件</div>
}
// ReactDOM.render(<Demo/>, 'root')
# class 组件 的基本知识
- 如果 A类 继承了 B类,A类 写了 构造器 constructor,一定要写 super 
- 类中的方法 挂载在原型对象上,实例可以访问 
class Person {
    // 构造器函数
    constructor(name, age) {
        // this 指向类的实例对象
        this.name = name;
        this.age = age;
    }
    // 一般方法 在 类的原型对象上,类的实例使用
    // 通过 Person 实例调用 speak 方法时,this 指向 Person 实例
    speak() {
        console.log(`我的名字是:${this.name}`)
    }
}
// 创建 Person 对象的实例对象
const p1 = new Person('笑死人', 16)
const p2 = new Person('笑死人', 16)
p1.speak() // 我的名字是:笑死人
p2.speak.call({ name: '小四' }) // 我的名字是: undefined
class Student extends Person {
    constructor() {
        super()
    }
}
# class 组件
- 适用于【复杂组件】定义 有状态组件 
- 执行 - ReactDOM.render(<Democlass/>, document.getElementById('root'))之后- react 解析标签,找到 Democlass 组件,随后 new 了该类的实例,调用原型上的 render 方法,将虚拟 DOM 转为真实dom,渲染到页面
- render 存在 类 的原型对象上,供实例使用
- render 中的 this 指向 Democlass 的组件实例对象
 
// 定义 class 组件
class Democlass extends React.Component {
    // render 存在 类 的原型对象上,供实例使用
    render() {
        return (<div>Democlass 组件</div>)
    }
}
// ReactDOM.render(<Democlass/>, 'root')
