React中函数组件和类式组件

2023-11-08

React中函数组件和类式组件

定义组件有两个要求:
     组件名称必须以大写字母开头
     组件的返回值只能有一个根元素

1. 函数组件

函数组件也称无状态组件,顾名思义就是通过函数编写的形式去实现一个React组件,是React中定义组件最简单的方式。
在 hooks 出现之前,react 中的函数组件通常只考虑负责UI的渲染,没有自身的状态和生命周期方法,没有业务逻辑代码,是一个纯函数。
它接收一个props对象作为参数用于接收父组件传递过来的参数,并返回一个React元素。
函数式组件通常比类组件更轻量级,因为它们没有状态和生命周期方法的开销。在大多数情况下,它们也比类组件更容易优化和测试,因为它们遵循纯函数的设计原则,输入相同则输出相同,不会产生副作用。

<script type="text/babel">/* 此处一定要写 babel */
    // 1.创建函数式组件
        function Demo(props){
            console.log(this) //此处的this是undefined,因为babel编译后开启了严格模式
            return <h2>函数组件,简单组件:{props.title}</h2>
        }
    // 渲染组件到页面
        // ReactDOM.render(Demo(),document.getElementById('app'))
        ReactDOM.render(<Demo/>,document.getElementById('app'))
        /*
            执行了ReactDOM.render(<Demo/>.......之后,发生了什么?
            1.React解析组件标签,找到了Demo组件。
            2.发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面中。
        */
    </script>

2. 类式组件

类组件是通过使用ES6类的编写形式去编写组件,是一个JavaScript类,它继承自React.Component,并实现一个render方法来返回一个React元素。它通常用类声明的方式来定义。

<script type="text/babel">/* 此处一定要写 babel */
    // 1.创建类式组件
        class Demo extends React.Component{
            //render是放在哪里的? - Demo的原型对象上,供实例使用。
            //render中的this是谁? - Demo的实例对象(Demo组件实例对象)。
            render(){
                console.log(this)
                return <h2>类组件,复杂组件</h2>
            }
        }
    // 2.渲染组件到页面
        ReactDOM.render(<Demo/>,document.getElementById('app'))
    /*
        执行了ReactDOM.render(<Demo/>.......之后,发生了什么?
        1.React解析组标签,找到了Demo组件。
        2.发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法。
        3.将render返回的虚拟DOM转为真实DOM,随后呈现在页面中。
    */
    </script>

3. 函数组件和类式组件的不同点

区别 函数组件 类式组件
是否有 this 没有
是否有生命周期 没有
是否有状态 state 没有
编写形式 函数形式 类形式

4. 函数组件和Hook

React Hooks 是从 React 16.8 版本推出的新特性,目的是解决 React 的状态共享以及组件生命周期管理混乱的问题。React Hooks 的出现标志着,React 不会再存在无状态组件的情况,React 将只有类组件和函数组件的概念。

使用Hooks,函数式组件可以具有以下特性:

  • 状态管理:可以使用useState hook来在函数式组件中管理状态。
  • 生命周期管理:可以使用useEffect hook来管理组件的生命周期。
  • 上下文管理:可以使用useContext hook来在函数式组件中使用上下文。
  • 引用和回调:可以使用useRef hook来获取组件的引用,并使用useCallback hook来优化回调函数的性能。

使用Hooks的函数式组件相比于类组件,具有以下优点:

  • 更加简洁:函数式组件使用函数的方式来定义组件,比类组件更加简洁。
  • 更加易读:由于Hooks可以将组件的逻辑分离到不同的函数中,使得组件的代码更加易读。
  • 更加灵活:Hooks可以让函数式组件具有更加灵活的状态管理和生命周期管理能力,使得组件的开发更加方便。

Hook 使用规则

  • 只在最顶层使用 Hook
  • 只在 React 函数中调用 Hook
         React 函数组件中
         React Hook 中 - 我自己定义 hook 时,可以调用别的hook
  • 所有的 hook 必须 以 use
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React中函数组件和类式组件 的相关文章

随机推荐

  • VS或者Qt调用外部动态链接库dll的方法

    1 VS调用外部动态链接库dll的方法 Windows 1 1 建立一个Win32控制台应用程序 1 2 如果搭建的是64位应用 需将平台调整为x64 1 3 将程序源码和头文件 动态链接库和静态连接库拷贝到项目对应的文件夹中 1 4 将上
  • Spring依赖注入和控制反转

    文章目录 1 依赖注入 1 1 依赖注入和控制反转的概念 1 2 依赖注入的实现方式 1 3 控制反转的具体实现 1 4 依赖注入的具体实现 1 5 依赖注入和控制反转总结 1 依赖注入 1 1 依赖注入和控制反转的概念 依赖注入 Depe
  • 前后端分离(axios发送数据请求,路由导航守卫,web会话跟踪,token)

    目录 1 前端登录发起请求 a 在 main js 中配置 axios b 组装请求数据 3 连接数据库 4 后端响应 5 前端处理 6 来到main组件时 需在前端判断用户是否登录 7 web会话跟踪技术 token 8 响应拦截器 9
  • os.path.expanduser

    path os path expanduser linux系统path为 home newt windows系统path为 C Users newt 其中newt为我的用户名
  • XSS攻击修改服务器的代码,XSS攻击的定义,类型以及防御方法

    经常跟大家讲 CC攻击 好像还没有给大家分享过XSS攻击它的类型怎么去防御 今天云都小编就带大家了解下 什么是XSS攻击 XXS 攻击全称跨站脚本攻击 是一种在Web应用中的计算机安全漏洞 它允许恶意Web用户将代码植入到提供给其他使用的页
  • 《机器学习》实验五:实现K-means聚类

    机器学习 实验五 实现K means聚类 机器学习 实验五 实现K means聚类 实验目的 实验原理 实验内容与要求 实验器材 设备 元器件 实验步骤 心得体会 机器学习 实验五 实现K means聚类 实验目的 了解聚类的基本概念 掌握
  • javascript对象小探之三——undefined和undeclared

    一 undefined undefined是javascript的一个数据类型对象 var i 那么i的值就是undefined 二 undeclared undeclared是一种语法错误 不是数据类型 不要误会了 但是js引擎不会报错
  • R语言学习笔记(三)数据处理

    本文的示例数据框集 egData 如下 值标签 if FALSE 值标签 levels代表变量实际值 labels代表标签值 egData sex lt factor egData sex levels c 1 2 labels c mal
  • WSL2+Docker+IDEA一站式开发调试

    WSL2 Docker IDEA一站式开发调试 将就看吧 不知道为什么CSDN无法转储并展示jsdelivr的图片 但博客园正常展示 前言 我们知道 Docker是一个容器引擎 对于开发者来说 使用Dokcer容器部署各种开发需要的中间件
  • linux端口开放指定端口的两种方法

    开放端口的方法 方法一 命令行方式 1 开放端口命令 sbin iptables I INPUT p tcp dport 8080 j ACCEPT 2 保存 etc rc d init d iptables save 3 重启服务 etc
  • 正则表达式和三剑客

    正则表达式与三剑客 Linux正则表达式 由一类特殊字符及文本字符所编写的模式 其中有些字符不表示其字面意义 而是用于表示控制或通配符的功能 分两类 基本正则表达式 BRE 扩展正则表达式 ERE 基本正则表达式DRE集合 元字符 作用 只
  • ROS环境搭建步骤总结

    ROS环境搭建踩坑总结 Ubuntu 16 04安装ROS Kinetic ROS安装 进入到 ROS官网选择安装的版本和系统 配置Ubuntu的repositories 以允许 restricted universe 和 multiver
  • vue element el-select下拉选择不回显问题

    el select下拉选择无效 问题描述 在使用Vue开发使用element ui时 el select下拉框出现在点击选择的时候数据无法显示的问题
  • MMX及SSE优化--SSE篇

    上回讲到针对整数运算的MMX优化技术 然而真正大运算量的图形和声音处理大都用的是浮点运算 而且现在对浮点运算的要求也是越来越高 在这样一个条件下INTEL终于在Pentium III处理中增加针对浮点运算优化的SSE指令 所以所有用过SSE
  • 初学者适合什么副业?适合初学者做的8个副业

    有网友曾说过 安全感是主业给的 但财富是靠副业创造的 可见 找一份靠谱的副业是多么的重要 但是 想找一份靠谱的副业 特别难 尤其是以前没有了解过的 看到各种副业吹嘘 根本无法下手 今天 聪少就给大家分享几个适合新手的副业 帮助大家快速走上副
  • 基于SpringBoot的外卖点餐管理系统

    项目背景 随着科学技术的飞速发展 各行各业都在努力与现代先进技术接轨 通过科技手段提高自身的优势社会的发展和科学技术的进步 互联网技术越来越受欢迎 网络计算机的生活方式逐渐受到广大人民群众的喜爱 也逐渐进入了每个用户的使用 互联网具有便利性
  • 基于STM32CUBEMX,HAL库蓝牙通信

    蓝牙通信 实现手机与stm32连接 1 准备工作 蓝牙模块HC 05模块 安卓APP软件 HC 05蓝牙模块支持AT指令 要进入AT指令模式 需要先按住蓝牙模块上的按键 接通电源 当模块上的LED灯进入慢闪后再松开按键 此时已经进入AT指令
  • vue-cli3.0引入高德地图3d效果两种方法+实例+填坑

    前言 因为项目需要引入高德地图的3d效果 找了很多资料 在这里记录下方法和实例组件 注意 因为两个方法代码量都特别大 这里分2个页面详细说一下 方法一是链接出去专门说 最下面有更多资料 高德3d官网地址和别的资料地址 方法一 使用官方案例
  • 掌握Python的X篇_32_使用python编辑pdf文件_pdfrw

    本篇介绍利用python操作pdf文件 我们平时也会有合并和拆分pdf的需求 此时我们就可以使用本节内容 文章目录 1 pdfrw的安装 2 切分pdf文件 3 pdfrw官网及实现一版四面的实例 1 pdfrw的安装 pip instal
  • React中函数组件和类式组件

    React中函数组件和类式组件 定义组件有两个要求 组件名称必须以大写字母开头 组件的返回值只能有一个根元素 1 函数组件 函数组件也称无状态组件 顾名思义就是通过函数编写的形式去实现一个React组件 是React中定义组件最简单的方式