【React】静态组件动态组件

目录

  • 静态组件
  • 动态组件
    • 创建一个构造函数(类)
      • 使用 `class` 实现组件**
      • 使用 `function` 实现类组件**

静态组件

函数组件是静态组件

  • 组件第一次渲染完毕后,无法基于内部的某些操作让组件更新「无法实现自更新」;但是,如果调用它的父组件更新了,那么相关的子组件也一定会更新「可能传递最新的属性值进来」;
  • 函数组件具备:属性…「其他状态等内容几乎没有」
  • 优势:比类组件处理的机制简单,这样导致函数组件渲染速度更快。

第一次渲染组件,把函数执行

  • 产生一个私有的上下文:EC(V)
  • 把解析出来的props「含children」传递进来「但是被冻结了
  • 对函数返回的JSX元素「virtualDOM」进行渲染
  • 当我们点击按钮的时候,会把绑定的小函数执行:
  • 修改上级上下文EC(V)中的变量
  • 私有变量值发生了改变
  • 但是视图不会更新

真实项目中,有这样的需求:第一次渲染就不会再变化的,可以使用函数组件。 但是大部分需求,都需要在第一次渲染完毕后,基于组件内部的某些操作,让组件可以更新,以此呈现出不同的效果,也就是动态组件「类组件、Hooks组件(在函数组件中,使用Hooks函数)」


const Vote = function Vote(props) {
    let { title } = props;
    let supNum = 10,
        oppNum = 5;

    return <div className="vote-box">
        <div className="header">
            <h2 className="title">{title}</h2>
            <span>{supNum + oppNum}</span>
        </div>
        <div className="main">
            <p>支持人数:{supNum}</p>
            <p>反对人数:{oppNum}</p>
        </div>
        <div className="footer">
            <button onClick={() => {
                supNum++;
                console.log(supNum);
            }}>支持</button>

            <button onClick={() => {
                oppNum++;
                console.log(oppNum);
            }}>反对</button>
        </div>
    </div>;
};
export default Vote;

可以看到,点击之后,页面并没有变化
在这里插入图片描述

动态组件

类组件是“动态组件”:

  • 组件在第一渲染完毕后,除了父组件更新可以触发其更新外,我们还可以通过:this.setState修改状态 或者 this.forceUpdate 等方式,让组件实现“自更新”!!
  • 类组件具备:属性、状态、周期函数、ref…「几乎组件应该有的东西它都具备」
  • 优势:功能强大。

Hooks组件「推荐」

  • 具备了函数组件和类组件的各自优势,在函数组件的基础上,基于hooks函数,让函数组件也可以拥有状态、周期函数等,让函数组件也可以实现自更新「动态化」。

创建一个构造函数(类)

  • 要求必须继承React.Component/PureComponent这个类
  • 通常使用使用ES6中的class创建类「因为方便」
  • 必须给当前类设置一个render的方法「放在其原型上」:在render方法中,返回需要渲染的视图
//import React .... : 把基于export default导出的内容获取到
//import { Component, PureComponent } .... : 不是对React对象做解构赋值,而是把基于 export function Component(){} 一个个导出的内容,做解构赋值

import React, { Component, PureComponent } from "react";

这里展示在 React 中使用类和函数两种方式来实现组件。

使用 class 实现组件**

通过 ES6 class 类来定义的。Vote 类继承了 React.Component,并通过 export default 导出。

class Vote extends React.Component {
  render() {
    return <div>投票组件</div>;
  }
}
export default Vote;

使用 function 实现类组件**

使用传统的 JavaScript 函数,通过 Object.setPrototypeOf 来使该函数继承 React.Component,从而具备 React 组件的能力。

function AAA() {
  React.Component.call(this);  // 手动绑定 React.Component 的上下文,模拟了类的构造器。
  this.state = { x: 10, y: 20 };
}
//设置 `AAA` 函数的原型链,使得它继承了 `React.Component` 的原型,从而具备了 React 组件的行为
Object.setPrototypeOf(AAA.prototype, React.Component.prototype);  // 设置原型链

AAA.prototype.sum = function () { /* 自定义方法 */ };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/956360.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一&#xff1a;使用 float 普通盒子实现横向布局 方法二&#xff1a;使用 display: inline-block 内联块级元素实现横向布局 方法三&#xff1a;使用弹性盒子 flexbox&#xff0…

Python实现过年烟花效果及打包成可执行文件

博客&#xff1a;Python实现过年烟花效果及打包成可执行文件 在这篇博客中&#xff0c;我们将详细讲解如何使用Python和Pygame库实现一个过年烟花效果的程序&#xff0c;并介绍如何将Python脚本打包成Windows上可以直接执行的exe文件。我们将从代码的各个模块入手&#xff0c;…

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵

本博文内容导读&#x1f4d5;&#x1f389;&#x1f525; ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上&#xff0c;提供了强大的灵活性&#xff0c;能适应不同的应用需求。 ESP32中断主…

SpringBoot2 + Flowable(UI)

文章目录 引言I 技术栈软件架构基于 Vue.js 和 Element UI 的后台管理系统工程结构II 依赖rest,logic,conf 的依赖工作流flowable jar包flowable-ui所需jar包III 配置jdbc 配置 nullCatalogMeansCurrent = true引言 I 技术栈 软件架构 前端基于vue 、element-ui框架分模块设…

.Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现

前言 最近使用最新版的Serilog记录日志时&#xff0c;发现以前有些关于Serilog的Nuget弃用了&#xff0c;最关键的是有些配置写法也改变&#xff0c;于是就整理了一下最新版的Serilog配置方式(appsetting.json)的使用 说明&#xff1a;我是用的.Net6&#xff0c;最新长期支持…

sprnigboot集成Memcached

安装Memcached 下载地址 32位系统 1.2.5版本&#xff1a;http://static.jyshare.com/download/memcached-1.2.5-win32-bin.zip 32位系统 1.2.6版本&#xff1a;http://static.jyshare.com/download/memcached-1.2.6-win32-bin.zip 32位系统 1.4.4版本&#xff1a;http://stati…

【数据分析】02- A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景&#xff1a;当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景&#xff1a;有一天&#xff0c;你在王国里担任“首席审判官”。你面前站着一位嫌疑人&#xff0c;有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的&#xff0c;还是他是被冤枉的&…

3dmax LOGO的符号、意义和历史,渲染100邀请码1a12

Autodesk 3ds Max 是一款 3D 建模、动画和渲染软件&#xff0c;由 Autodesk, Inc. 于 1996 年开发&#xff0c;其功能是能够创建复杂的数字场景和视觉效果&#xff0c;被专业建筑师、设计师和视频游戏创作者广泛使用&#xff0c;提供了七种语言的 Windows 版本&#xff0c;没有…

线段树优化dp,abc389F - Rated Range

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 F - Rated Range 二、解题报告 1、思路分析 考虑定义 f(i, j) 为 初始分…

青少年CTF练习平台 EasyMD5解题思路

题目 EasyMD5 PHP弱类型/弱等于的判断 翻译 上传之后网页提示&#xff1a;Not a PDF! angry!!! get out from my page 修改文件后缀为pdf 再次上传&#xff0c;答案出来了 s878926199a s155964671a 成功获取flag

Amazon MSK 开启 Public 访问 SASL 配置的方法

1. 开启 MSK Public 1.1 配置 MSK 参数 进入 MSK 控制台页面&#xff0c;点击左侧菜单 Cluster configuration。选择已有配置&#xff0c;或者创建新配置。在配置中添加参数 allow.everyone.if.no.acl.foundfalse修改集群配置&#xff0c;选择到新添加的配置。 1.2 开启 Pu…

SW - 钣金零件保存成DWG时,需要将折弯线去掉

文章目录 SW - 钣金零件保存成DWG时&#xff0c;需要将折弯线去掉概述笔记备注END SW - 钣金零件保存成DWG时&#xff0c;需要将折弯线去掉 概述 如果做需要弯折的切割件&#xff0c;最好做成钣金零件。 最近做了几个小钣金(将钣金展开&#xff0c;建立新草图&#xff0c;在2…

深度学习 Pytorch 基本优化思想与最小二乘法

在正式开始进行神经网络建模之前&#xff0c;我们还需要掌握pytorch中最核心的基础数学工具——autograd(自动微分)模块。虽然对于任何一个通用的深度学习框架都会提供许多自动优化的算法和现成的loss function&#xff0c;但如果想更深入理解神经网络&#xff0c;对深度学习的…

Ceph与RAID在存储中的协同工作过程

本文将结合架构图&#xff0c;详细讲解Ceph与RAID如何在存储环境中相互配合&#xff0c;共同提供高效且可靠的存储服务。 架构概述 从上图中可以看到&#xff0c;Ceph的架构主要分为四个层次&#xff1a; 客户端和服务接口层&#xff1a;这一层包括客户端访问存储应用的接口…

PyTest自学-认识PyTest

1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么&#xff1f; PyTest是一个自动化测试框架&#xff0c;支持单元测试和功能测试&#xff0c;有丰富的插件&#xff0c;如&#xff0c;pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…

【MathType】mathtype在word中格式问题

【MathType】mathtype在word中格式问题 1. 问题解决方法效果 2.新的问题解决方法效果 1. 问题 mathtype在word中格式显示不全 解决方法 CtrlC&#xff1a;选中全部——>段落——>设置为单倍行距 效果 已经可以全部显示出来&#xff0c;但是还有新问题&#xff01;…

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…

华为AI培训-NLP实验

中文分词、命名实体识别、语义词性标注、语句逻辑推理、文本摘要、机器翻译、文本情感分析、内容创作 1 实验介绍 1.1 实验背景 中文分词、命名实体识别、语义词性标注、语句逻辑推理是自然语言处理领域中的重要任务。中文分词是将连续的汉字序列切分成有意义的词语序列…

一文大白话讲清楚webpack基本使用——4——vue-loader的配置和使用

一文大白话讲清楚webpack基本使用——4——vue-loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇&#xff1a;一文大白话讲清楚啥是个webpack第二篇&#xff1a;一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建第三篇一文大白话讲清楚webpack基本使用…

【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…