React 之 面向组件编程

什么是组件?

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

 

为什么要使用组件?

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

 

官方提供了两种定义组件的方式

1.函数式组件

特点:适用于[简单组件]的定义

 

一.函数式组件

复制代码
// 创建函数式组件
    function MyComponent(){
      console.log(this) // 此处的this是undefined 因为babel编译后开启了严格模式
      return <h2>我是函数定义的组件</h2>
    }
    ReactDOM.render(<MyComponent/>,document.getElementById('test'))
    /* 
       执行了ReactDOM.render后发生了什么?
       1.React解析组件标签,找到了MyComponent组件
       2.发现组件是使用函数定义的,随后调用该函数,将返回的虚拟dom转为真实的dom,随后呈现在页面中

    */
复制代码

 

二.类式组件

复制代码
 class MyComponent extends React.Component {
      render(){
        /* 
           render是放在哪里的? --MyComponent的原型对象上,供实例使用 
           render中的this是谁? --MyComponent的实例对象,也可以说MyComponent组件实例对象 = 组件对象
        */
        console.log('render中的this:',this)
        return <h2>我是用类定义的组件(适用于[复杂组件]的定义)</h2>
      }
    }
    // 2.渲染到页面
    ReactDOM.render(<MyComponent/>,document.getElementById('test'))
    /* 
       执行了ReactDOM.render(<MyComponent/>.....)后发生了什么?
       1.React解析组件标签,找到MyComponent组件
       2.发现组件是使用类定义的,随后new出来类的实例,并通过实例去调用render方法
    */
复制代码

 

 

类的复习

复制代码
class Person {
        // 构造器方法
        constructor(name,age){
          //构造器中的this是谁? 类的实例对象
          this.name= name
          this.age = age
        }
        // speak方法放在了哪里? Person类的原型对象上,供实例使用
        speak(){
          console.log(`我叫${this.name}, 我的年龄是${this.age}`);
        }
      }
      const p1 = new Person('tom',18)
      p1.speak()
      console.log(p1);
    
    
      class Student extends Person {
        constructor(name,age,grande){
          super(name,age) //必须在第一行
          this.grande = grande
        }
        //重写从父类继承过来的方法
        speak(){
          console.log(`我叫${this.name}, 我的年龄是${this.age},我的年级是${this.grande}`);
        }
      }

      const s1 =  new Student('小行',30,'一年级')
      s1.speak()
      console.log(s1)

总结:
1.类中的构造器不是必须要写的,要对实例进行一些初始的从操作,如添加指定属性时才写
2.如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的
3.类中所定义的方法,都是放在了类的原型对象上,供实例去使用
复制代码

 

posted @   zmztyas  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示