当前位置: 首页 > news >正文

React函数式写法和类式写法的区别(以一个计数器功能为例子)

 

函数式写法更加简洁和函数式编程思维导向,适用于无状态、UI纯粹的组件,且可以使用Hooks处理副作用。而类式写法适用于有内部状态、生命周期方法和复杂交互逻辑的组件,提供了更多的灵活性和控制力。

文章目录

一、计数器功能演示

1.函数式写法

2.类式写法

二、函数式和类式的区别

三、函数式和类式在代码方面的不同


一、计数器功能演示

1.函数式写法

代码如下(示例):

import React, { useState } from 'react';const CounterFunctional = () => {const [count, setCount] = useState(0);const increment = () => {setCount(count + 1);};return (<div><h2>Counter (Functional)</h2><p>Count: {count}</p><button onClick={increment}>Increment</button></div>);
};export default CounterFunctional;

使用useState钩子来声明一个名为count的状态变量,并通过setCount函数更新它。当点击按钮时,调用increment函数来增加计数器的值。  


 

2.类式写法

代码如下(示例):

import React from 'react';class CounterClass extends React.Component {constructor(props) {super(props);this.state = {count: 0,};}increment = () => {this.setState({ count: this.state.count + 1 });};render() {return (<div><h2>Counter (Class)</h2><p>Count: {this.state.count}</p><button onClick={this.increment}>Increment</button></div>);}
}export default CounterClass;

定义了一个名为CounterClass的类组件。在构造函数中初始化了一个count的状态属性。increment方法被定义在类的原型上,用于增加计数器的值。在render方法中,我们通过this.state.count访问状态值,并将其渲染到UI中。


二、函数式和类式的区别

函数式写法:

  • 纯函数:函数式组件本质上是一个纯函数,接收输入参数(props)并返回输出结果(JSX元素)。它没有内部状态,只依赖于传入的属性进行渲染和处理逻辑。
  • 函数组件:在React中,可以使用函数来定义组件。使用函数组件能够更简洁地编写UI组件,尤其是对于无需内部状态或生命周期方法的简单组件而言。
  • React Hooks:函数式组件可以使用React Hooks,如useStateuseEffect等来管理状态、副作用和订阅等行为。Hooks提供了一种在函数组件中使用类组件类似功能的方式。

类式写法:

  • 类组件:在React中,可以通过继承React.Component类来创建组件。类组件具有内部状态和生命周期方法,允许组件拥有更多的复杂逻辑和交互。
  • 内部状态:类组件可以通过state属性来存储和更新内部数据。使用setState方法可以触发组件的重新渲染,并在必要时执行相关操作。
  • 生命周期方法:类组件具有一系列生命周期方法(如componentDidMountcomponentDidUpdate等),可以在特定的时刻执行一些操作,例如数据获取、订阅和清理等。

其他共同知识点:

  • JSX:函数式和类式写法都使用JSX来描述UI层的结构和组件关系。JSX是一种将HTML标记和JavaScript代码结合的语法扩展。
  • 属性传递:在函数式和类式组件中,通过属性(props)来传递数据和回调函数,使得组件之间可以共享信息和交互。

三、函数式和类式在代码方面的不同

  • 状态管理:

    • 函数式写法:使用React Hooks中的useStateuseReducer等钩子来管理组件的状态。
    • 类式写法:通过构造函数中的this.state来初始化并通过this.setState方法进行状态更新。
  • 生命周期:

    • 函数式写法:函数式组件没有生命周期方法,但可以使用useEffect钩子来处理组件挂载、更新和卸载时的副作用。
    • 类式写法:通过重写类的生命周期方法(如componentDidMountcomponentDidUpdatecomponentWillUnmount等)来处理组件生命周期事件。
  • 组件通信:

    • 函数式写法:通过属性(props)传递数据和回调函数来实现父子组件之间的通信,也可以使用Context API或第三方库(如Redux)进行全局状态管理。
    • 类式写法:同样通过属性(props)传递数据和回调函数来实现父子组件之间的通信,也可以使用Context API或Redux等进行全局状态管理。此外,类组件还可以通过ref引用来获取或操作子组件。
  • 内部状态和方法:

    • 函数式写法:函数式组件没有内部状态(state)和实例方法(method),只关注接收属性和渲染UI。
    • 类式写法:类组件可以通过this.state来定义内部状态,并通过类的方法来操作和更新状态。
  • 组件的性能优化:

    • 函数式写法:使用React.memo进行函数组件的记忆化,以避免不必要的重渲染。
    • 类式写法:使用shouldComponentUpdate或React.PureComponent来避免不必要的重渲染。

 

http://www.lryc.cn/news/198101.html

相关文章:

  • 【根据国防科大学报官网word模板修改的Latex模板】
  • 系列十一、Redis中分布式缓存实现
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-4)
  • 腾讯云服务器端口localhost可以访问,外部无法访问解决
  • 【软考-中级】系统集成项目管理工程师 【16 变更管理】
  • 【Eclipse】查看版本号
  • 论文精讲目录
  • 双飞翼布局和圣杯布局
  • Hive insert插入数据与with子查询
  • 如何在Django中集成JWT
  • hive进行base64 加密解密函数
  • Docker安装GitLab及使用图文教程
  • asp.net酒店管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv 计算机竞赛
  • vue中动态设置source标签
  • 【16】基础知识:React路由 - React Router 6
  • Unity3D 基础——Coroutine 协同程序
  • IDEA报错:前言中不允许有内容
  • 在线课堂分销商城小程序源码系统 带完整搭建教程
  • 【存储系统】0. 序
  • 逐字稿 | 2 MoCo 论文逐段精读【论文精读】
  • 【数据结构】排序算法的稳定性分析
  • Redis AOF持久化和ReWrite
  • Flink学习之旅:(一)Flink部署安装
  • Go语言入门心法(六): HTTP面向客户端|服务端编程
  • 为什么非const静态成员变量一定要在类外定义
  • 千兆光模块和万兆光模块的区别?
  • 中断:Zynq Uart中断的流程和例程~UG585的CH.19
  • 计算机补码能够减法转加法的原因
  • 软件工程与计算总结(十九)软件测试