React中函数组件与类组件的区别

2023-11-13

React中函数组件与类组件的区别

一、组件定义

函数组件

import React from 'react'

function Index(props) {
  const [value, setvalue] = useState('React')
  return (
    <div>
      {value} ----- {props.val}
    </div>
  )
}

export default Index

class类组件

import React, { Component } from 'react'

export default class Index extends Component {
  // constructor(props){
  /   ///接收props
  //   super(props)
  //   this.value = 'React'
  // }
  state={
    value:'React'
  }
  render() {
    return (
      <div>
        {this.state.value} ---{this.props.val}
      </div>
    )
  }
}

二、区别

函数组件

  • 是一个纯函数,它接收一个props对象返回一个react元素
  • 没有生命周期,使用hook增强函数组件
  • 组件不能访问this对象
  • 没有state、setState, 需要通过React.useState来定义初始值
  • 直接通过{value}将变量渲染到页面上

类组件

  • 需要去继承React.Component并且创建render函数返回react元素
  • 有生命周期
  • 有state、setState
  • 需要通过{this.state.value}将变量渲染到页面上

共同点

  • 组件名称必须以大写字母开头
  • 属性 props 是外界传递过来的,状态 state 是组件本身的,状态可以在组件中任意修改
  • props不可修改,如果要修改只能在父组件修改,子组件接收新的props,或者通过调用父组件传递过来的可以改变state的方法,来改变父组件的状态
  • props与state改变都会重新触发render ,重新渲染组件

缺点

class 组件存在的问题:

  • 大型组件很难拆分和重构,变得难以测试 、
  • 相同业务逻辑分散到各个方法中,可能会变得混乱
  • 复用逻辑可能变得复杂,如 HOC 、Render.、Props
  • 所以 react中更提倡函数式编程,因为函数更灵活,更易拆分,但函数组件太简单,所以出现了hook,hook就是用来增强函数组件功能的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React中函数组件与类组件的区别 的相关文章

随机推荐

  • 常用的加解密技术(2)

    公开密钥体系 公开密钥密码体制是现代密码学的最重要的发明和进展 一般理解密码学 Cryptography 就是保护信息传递的机密性 但这仅仅是当今密码学主题的一个方面 对信息发送与接收人的真实身份的验证 对所发出 接收信息在事后的不可抵赖以
  • python切片的总结

    目录 介绍切片 格式 1 切割单个值 2 切割完整对象 3 start和end全部取正数的情况 4 start和end全部取负数的情况 5 start和end正负混合情况 7 切片中的三个参数为表达式 8 切片可以操作其他的对象 总结 介绍
  • Centos7 防火墙详细操作

    centos7 通过firewall cmd命令添加防火墙白名单 1 查看防护墙状态 firewall cmd state 或 systemctl status firewalld active running gt 表示防火墙已经开启 i
  • iOS进阶_NSURLConnection(被弃用的原因:Connection的缺点)

    NSURLConnection下载 我们在前面的文章中介绍了MAC电脑搭建Apache服务器 在Sites文件夹中放置一个视频文件MVVM mp4 pbb 通过NSURLConnection进行下载 访问http localhost 我们可
  • 局部变量和静态局部变量

    一 局部变量 局部变量也叫auto自动变量 auto可写可不写 一般情况下代码块 内部定义的变量都是自动变量 它有如下特点 1 作用域 a 在一个函数内定义 只在函数范围内 也就是在定义变量的 之内 有效 b 在复合语句中定义 只在复合语句
  • 解决GridView控件的居中问题

    先简单介绍一下GridView控件 它被称为列表视图控件 用于在一个列表中显示数据源的值 其中每列表示一个字段 每行表示一条记录 简单来讲 就是一个列表 可以将数据源绑定到该列表控件上 在浏览器上显示出来就是存放着数据的列表 我在VS201
  • jetbrains IDE 关闭自动提示

    去掉Auto display code completion前面的对勾
  • python基础知识之函数的定义及用法

    目录 前言 一 函数的定义和调用 1 函数的作用 2 函数名的命名规范 3 函数的返回值 return 4 调用函数 二 函数的参数 1 函数形参和实参 2 参数传递的两种形式 3 函数定义的三种形参 三 函数的作用域 1 全局变量 2 局
  • Android 5.0学习之AnimatedVectorDrawable

    http blog csdn net cym492224103 article details 41677825 前言 示例代码地址 animated vector drawable 几句代码 几个配置文件即可实现以上效果 流畅的体验 无缝
  • replaceAll用法 (vue搜索框过滤数据高亮显示)

    举例 vue搜索框过滤数据高亮显示 在计算属性里面写一个方法 先用filter过滤item 然后用indexof方法查找是否包含 item name index0f this txt gt 1 indexof gt 1表示包含 this t
  • 01-不是过去的原因而是现在目的

    01 不是过去的原因而是现在目的 例1 如我们现在不敢或不喜欢与人交往的性格 甚至闭门不出 我们很自然的认识是受小时候在父母虐待下长大或父母关系不和 或在学校 职场收到耻辱 家庭环境等过去因素的影响而留下心灵创伤 也就是我们内心把原因归结为
  • 跨平台C/C++开发软件CLion使用教程:入门指南(二)

    本篇教程主要介绍 CLion 入门指南里关于协助编码的内容 点击获CLion官方正式版 自动完成 Ctrl SpaceCLion 中的基本补全在您键入时工作 并提供所有可用补全的列表 要过滤此列表并仅查看与预期类型匹配的建议 请使用智能完成
  • JAVA 练习题(4)

    数字资产的概念被提出来 用于给数字资产加密的业务变得非常火热 现有一套用于给数字资产加密的系统专门用于产生加密密码 请设计一个方法用于给数字密码进行加密 加密规则如下 根据数字长度的每位数 给每位数 5 再对10求余 最后将所有数字反转 得
  • 使用Electron来给若依系统打包成exe程序,出现登录成功但是不跳转页面(已解决)

    阿丹 之前解决了css找不到文件等问题 那么新问题就来了 问题描述 进入到登录页面发现问题 点击登录一直在转圈 但是不进去 更诡异的是 后台相应的很快 已经显示操作成功了 甚至 redis中都存了token了 并且前台的验证码图片还能正常访
  • STM32串口中断处理中.是否需要清除接受/发送完成/中断 标志位的问题.

    关于是否在串口中断服务程序中 是否加清除标志位操作 手册有说明 正常的读写DR寄存器都能达到清楚标志的效果 所以除了多缓存通信的情况下 没必要增加清除标志位 两个清除函数 USART ClearFlag 清除完成标志位 USART Clea
  • ShardingSphere-JDBC 5.0.0-beta使用:数据源拒绝建立连接,来自服务器的消息:“连接太多”

    问题分析 I wonder if the jar package is missing This is a non Maven project 问题处理 调试发现 问题出在少了蛮多依赖包 由于是非maven项目 有些jar包还可能冲突 版本
  • Java Robot 编写脚本机器人(一)基本用法测试

    Test public void test throws AWTException 获取机器人类 Robot robot new Robot 获取当前屏幕 Point point MouseInfo getPointerInfo getLo
  • 【Python_PySide2学习笔记(一)】PySide2动态加载UI方式,重写关闭窗体事件

    PySide2设置关闭提示窗口 动态加载UI方式 重写关闭窗体事件 前言 转载 https blog csdn net qq 44703282 article details 119830807 在此链接中介绍了两种重写关闭提示窗体事件的方
  • Vue CLI3配置详解-----脚手架的认识以及项目初始化、项目目录结构

    使用Vue CLI3创建项目 脚手架 scaffold 指施工现场为工人操作并解决垂直和水平运输而搭设的各种支架 建筑界的通用术语 写在前面 如果你只是简单的写几个Vue的 Demo 程序 那你不需要Vue CLI 如果你 开发大型项目 那
  • React中函数组件与类组件的区别

    React中函数组件与类组件的区别 一 组件定义 函数组件 import React from react function Index props const value setvalue useState React return di