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 中类组件,组件间的区别,有无状态组件,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。



相关文章
|
1月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
6月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
272 68
|
6月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
251 67
|
4月前
|
JavaScript 前端开发 API
对比Vue框架与React库的主要区别
在选择Vue还是React时,考虑项目的需求、团队的熟悉程度和个人偏好至关重要。如果项目需要快速原型开发和较小的学习曲线,Vue可能是更好的选择。相反,如果项目需要更大的灵活性,或者项目团队已经有React的经验,那么React可能是更合适的选择。
228 13
|
6月前
|
前端开发 JavaScript 安全
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
281 62
|
8月前
|
移动开发 前端开发 JavaScript
React音频播放列表组件:常见问题、易错点与解决方案
本文介绍了在React中实现音频播放列表时常见的挑战及解决方案。通过基础实现、常见问题分析和最佳实践,帮助开发者避免状态管理、生命周期控制和事件处理中的陷阱。关键点包括使用`useRef`操作音频元素、`useState`同步播放状态、全局状态管理防止多音频同时播放、以及通过`useEffect`清理资源。还提供了代码示例和跨浏览器兼容性处理方法,确保高效实现功能并减少调试时间。
289 30
|
8月前
|
移动开发 前端开发 UED
React 音频音量控制组件 Audio Volume Control
在现代Web应用中,音频播放功能不可或缺。React以其声明式编程和组件化开发模式,非常适合构建复杂的音频音量控制组件。本文介绍了如何使用HTML5 `&lt;audio&gt;`元素与React结合,实现直观的音量控制系统,并解决了常见问题如音量范围不合理、初始音量设置及性能优化等,帮助开发者打造优秀的音频播放器。
306 27
|
8月前
|
编解码 前端开发 开发者
React 图片组件样式自定义:常见问题与解决方案
在 React 开发中,图片组件的样式自定义常因细节问题导致布局错乱、性能损耗或交互异常。本文系统梳理常见问题及解决方案,涵盖基础样式应用、响应式设计、加载状态与性能优化等,结合代码案例帮助开发者高效实现图片组件的样式控制。重点解决图片尺寸不匹配、边框阴影不一致、移动端显示模糊、加载失败处理及懒加载等问题,并总结易错点和最佳实践,助力开发者提升开发效率和用户体验。
275 22
|
8月前
|
移动开发 前端开发 开发者
React 音频播放控制组件 Audio Controls
本文介绍了如何使用React构建音频播放控制组件,涵盖HTML5 `&lt;audio&gt;`标签和React组件化思想的基础知识。针对常见问题如播放状态管理、进度条更新不准确及跨浏览器兼容性,提供了详细的解决方案和代码示例。同时,还总结了易错点及避免方法,如确保音频加载完成再操作、处理音频错误等,帮助开发者实现稳定且功能强大的音频播放器。
352 11
|
8月前
|
移动开发 前端开发 UED
React 音频进度条组件 Audio Progress Bar
在现代Web开发中,音频播放功能不可或缺。使用React构建音频进度条组件,不仅能实现播放控制和拖动跳转,还能确保代码的可维护性和复用性。本文介绍了如何利用HTML5 `&lt;audio&gt;`标签的基础功能、解决获取音频时长和当前时间的问题、动态更新进度条样式,并避免常见错误如忘记移除事件监听器和忽略跨浏览器兼容性。通过这些方法,开发者可以打造高质量的音频播放器,提升用户体验。
323 6