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.类中所定义的方法,都是放在了类的原型对象上,供实例去使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现