React 类组件,组件间的区别,有无状态组件

简介: React 类组件,组件间的区别,有无状态组件

类组件

使用class定义组件的时候,首先要先从react中解构出React.Component,并继承它

class Test extends Component{ 
    //继承Component,Component相当于React.Component  
    render(){   
    return <div>我是class定义的一个组件</div> 
}}
ReactDOM.render()

当组件是一个类定义的时候,执行ReactDOM.render函数的原理:

1、首先找到组件对应的类,并new了这个类的一个实例

2、通过实例找到原型上的render函数,让render执行

3、ReactDOM.render接收到原型上render函数retrun的虚拟的dom

4、将虚拟dom转换成真实dom,插入到页面中

setState是react类组件中最常用的一个react API,使用它可以改变state从而改变页面。

this.setState是异步的

在你调用了this.setState后在他的下面输出他的结果还是没变的状态

this.setState({count:this.state.count+1})
console.log(this.state,‘000’) //结果式之前的,不是最新的

this.setState的第一个参数可以是一个对象,也可以是一个函数返回一个对象,

函数的参数是上一次的state

this.setState((prevState)=>({count:prevState.count+1}))


this.setState的第二个参数是它的回调函数,在前面重新给state赋值后执行

this.setState({count:this.state.count+1},()=>{
console.log(this.state.count)
})

注:多次调用state会合并为一次,只有当更新结束后 state 才会改变

多次调用state,同时执行

setTimeout(()=>{
   this.setState({count:this.state.count+1})
   this.setState({count:this.state.count+1})
   this.setState({count:this.state.count+1})
},100)

组件之间的区别

函数式组件和类组件的区别

  1. 语法上的区别:

函数式组件是一个纯函数,它是需要接受props参数并且返回一个React元素就可以了。

类组件是需要继承React.Component,而且class组件需要创建render并且返回React元素,

语法上来讲更复杂。

调用方式:

函数式组件可以直接调用,返回一个新的React元素;

类组件在调用时是需要创建一个实例的,然后通过调用实例里的render方法来返回一个React元素。

状态管理(state):

函数式组件没有状态管理,类组件有状态管理。

使用场景:

类组件没有具体的要求。

函数式组件一般是用在大型项目中来分割大组件(函数式组件不用创建实例,所有更高效),

一般情况下能用函数式组件就不用类组件,提升效率。


组件的状态(state)和属性(props)之间有何不同

State 是一种数据结构,用于组件挂载时所需数据的默认值。
State 可能会随着时间的推移而发生突变,但多数时候是作为用户事件行为的结果。
Props(properties 的简写)则是组件的配置。
props 由父组件传递给子组件,并且就子组件而言,props 是不可变的(immutable)。
组件不能改变自身 的 props,但是可以把其子组件的 props 放在一起(统一管理)。
Props 也不仅仅是数据–回调函数也可以通过 props 传递。

什么是有状态组件?什么是无状态组件?

有状态组件和无状态组件指的是组件是否有自己的数据(state)

有状态组件

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      name: '张三'
    }
  }
  render() {
    return (
      <div>
        <h1>{this.state.name}</h1>
      </div>
    )
  }
}
注:类组件继承React.Component组件,会从父类中继承一个state属性,通过这个属性可以定义自己的状态

无状态组件

function App() {
  return (
    <div>
      <h1>hello</h1>
    </div>
  )
}
注:函数式组件没有继承React.Component组件,没有state属性,没有自己的状态 (使用HOOK可以给函数式组件添加状态)

函数式无状态组件特点

● 它是为了创建纯展示组件,这种组件只负责根据传入的props来展示,不涉及到state状态的操作。

● 组件不能访问this对象

● 不能访问生命周期方法


函数式组件的性能优化

减少重新 render 的次数。因为在 React 里最重(花时间最长)的一块就是 reconction(简单的可以理解为 diff),如果不 render,就不会 reconction。

减少计算的量。主要是减少重复计算,对于函数式组件来说,每次 render 都会重新从头开始执行函数调用。

总结:

以上就是 React 中类组件,组件间的区别,有无状态组件,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。



相关文章
|
10天前
|
前端开发 UED 索引
React 图片灯箱组件 Image Lightbox
图片灯箱组件是一种常见的Web交互模式,用户点击缩略图后弹出全屏窗口展示大图,并提供导航功能。本文介绍了基于React框架的图片灯箱组件开发,涵盖初始化状态管理、图片加载与预加载、键盘和鼠标事件处理等常见问题及解决方案。通过`useState`和`useEffect`钩子管理状态,使用懒加载和预加载优化性能,确保流畅的用户体验。代码案例展示了组件的基本功能实现,包括打开/关闭灯箱、切换图片及键盘操作。
108 80
|
9天前
|
移动开发 前端开发 JavaScript
React 视频播放器组件:Video Player
本文介绍了如何使用 React 和 HTML5 `&lt;video&gt;` 标签构建自定义视频播放器组件。首先,通过创建基础的 React 项目和 VideoPlayer 组件,实现了基本的播放、暂停功能。接着,探讨了常见问题如视频加载失败、控制条样式不一致、性能优化不足及状态管理混乱,并提供了相应的解决方案。最后,总结了构建高效视频播放器的关键要点,帮助开发者应对实际开发中的挑战。
55 27
|
12天前
|
前端开发 JavaScript API
React 图片放大组件 Image Zoom
本文介绍如何使用React创建图片放大组件(Image Zoom),提升用户体验。组件通过鼠标悬停或点击触发放大效果,利用`useState`管理状态,CSS实现视觉效果。常见问题包括图片失真、性能下降和移动端支持,分别可通过高质量图片源、优化事件处理和添加触摸事件解决。易错点涉及状态管理混乱、样式冲突和过多事件绑定,建议使用上下文API、CSS模块及优化事件绑定逻辑。高级功能扩展如多张图片支持和自定义放大区域进一步丰富了组件的实用性。
43 25
|
8天前
|
存储 编解码 前端开发
React 视频上传组件 Video Upload
随着互联网的发展,视频内容在网站和应用中愈发重要。本文探讨如何使用React构建高效、可靠的视频上传组件,涵盖基础概念、常见问题及解决方案。通过React的虚拟DOM和组件化开发模式,实现文件选择、进度显示、格式验证等功能,并解决跨域请求、并发上传等易错点。提供完整代码案例,确保用户能顺畅上传视频。
118 92
|
13天前
|
移动开发 前端开发 JavaScript
React 图片裁剪组件 Image Cropper
本文介绍了在React中实现图片裁剪功能的方法,涵盖基础知识、常见问题及解决方案。首先,通过第三方库如`react-image-crop`或`cropperjs-react`可轻松实现图片裁剪。接着,针对性能和兼容性问题,提供了优化图片加载、处理裁剪区域响应慢、解决浏览器差异等方案。最后,通过代码案例详细解释了如何创建一个基本的图片裁剪组件,并提出了优化建议,如使用`React.memo`、添加样式支持及处理大图片预览,帮助开发者避免常见错误并提升用户体验。
95 67
|
18天前
|
前端开发 JavaScript UED
React 拖拽排序组件 Draggable List
在现代Web应用中,拖拽排序功能显著提升用户体验。使用React结合`react-dnd`库,可以轻松创建高效且易于维护的拖拽排序组件。通过简单的拖拽操作,用户能直观调整列表项顺序,适用于任务管理、看板工具等场景。实现步骤包括项目初始化、安装依赖、创建基础组件、添加拖拽功能及管理状态和事件。常见问题如拖拽效果不流畅、顺序未更新等可通过性能优化、正确处理索引交换等方式解决。移动端支持也需考虑,确保跨平台的良好体验。
81 25
|
11天前
|
存储 前端开发 索引
React 图片轮播组件 Image Carousel
本文介绍了如何使用React创建图片轮播组件。首先,解释了图片轮播的基本概念和组件结构,包括图片容器、导航按钮、指示器和自动播放功能。接着,通过代码示例详细说明了创建基本组件、添加自动播放、处理边界情况的步骤。还探讨了常见问题如状态更新不及时、内存泄漏和样式问题,并提供了解决方案。最后,介绍了进阶优化,如添加过渡效果、支持触摸事件和动态加载图片,帮助读者构建更完善的轮播组件。
30 16
|
19天前
|
前端开发 JavaScript UED
React 轮播图组件 Carousel
本文介绍了如何在 React 中实现和优化轮播图组件,涵盖自动播放、手动切换、循环播放和响应式设计等核心功能。通过 `useState` 和 `useEffect` 钩子管理状态和副作用,添加左右箭头和指示器增强交互性。同时,探讨了常见问题如自动播放与手动切换冲突、指示器样式不一致、响应式设计及性能优化,并提供解决方案和代码示例。帮助开发者提升轮播图组件的用户体验。
68 26
|
15天前
|
移动开发 前端开发 数据可视化
React 拖拽布局组件 Drag & Drop Layout
本文介绍了如何在React中构建拖拽布局组件,涵盖基础知识、常见问题及解决方案。首先解释了拖拽操作的三个阶段:开始、过程中和结束。接着推荐了几个常用的拖拽库,如`react-beautiful-dnd`,并详细展示了如何使用该库创建基础拖拽组件,包括安装依赖、初始化容器和处理拖拽结束事件。文章还探讨了常见问题,如拖拽不生效、性能优化、嵌套拖拽和跨浏览器兼容性,并提供了进阶技巧,如自定义样式、多列布局和集成其他UI组件。通过这些内容,读者可以掌握构建高效拖拽布局的方法。
41 16
|
15天前
|
前端开发 安全 UED
React 文件预览组件:File Preview
在现代Web应用中,文件上传和预览功能至关重要。本文基于React库,详细介绍如何构建文件预览组件,涵盖文件选择器、图片预览、文件大小限制及多种文件类型支持。通过实际代码示例,解析常见问题如跨域请求、文件路径处理和状态管理,并提供解决方案。帮助开发者提升用户体验,减少误操作。
32 2