React---day5
4、React的组件化
组件的分类:
- 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);
- 根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和有状态组件(Stateful Component);
- 根据组件的不同职责,可以分成:展示型组件(Presentational Component)和容器型组件(Container Component);
函数组件、无状态组件、展示型组件主要关注UI的展示;
类组件、有状态组件、容器型组件主要关注数据逻辑;
类组件:
import React from "react";
export class App extends React.Component{constructor(){super();this.state = {counter : 0}}render(){return (<div><h2>当前计数为{this.state.counter}</h2></div>)}
}
函数组件:
export function Func (){return (<div><span>我是function的组件:App组件</span></div>)
}
类组件:
- 组件的名称是大写字符开头(无论类组件还是函数组件)
- 类组件需要继承自 React.Component
- 类组件必须实现render函数
函数组件:
- 没有生命周期,也会被更新并挂载,但是没有生命周期函数;
- 没有this(组件实例);
- 没有内部状态(state);
- 我们来定义一个函数组件:
render函数的返回
-
React 元素:
通常通过 JSX 创建。例如,
会被 React 渲染为 DOM 节点, 会被 React 渲染为自定义组件;无论是还是 均为 React 元素。 -
数组或 fragments:使得 render 方法可以返回多个元素。
-
Portals:可以渲染子节点到不同的 DOM 子树中。
-
字符串或数值类型:它们在 DOM 中会被渲染为文本节点
-
布尔类型或 null:什么都不渲染。
5、React的生命周期
什么是生命周期:
- 比如装载阶段(Mount),组件第一次在DOM树中被渲染的过程;
- 比如更新过程(Update),组件状态发生变化,重新更新渲染的过程;
- 比如卸载过程(Unmount),组件从DOM树中被移除的过程;
生命周期函数:
- 比如实现componentDidMount函数:组件已经挂载到DOM上时,就会回调;
- 比如实现componentDidUpdate函数:组件已经发生了更新时,就会回调;
- 比如实现componentWillUnmount函数:组件即将被移除时,就会回调;
详解生命周期函数:
Constructor
如果不初始化 state 或不进行方法绑定,则不需要为 React 组件实现构造函数。
constructor中通常只做两件事情:
- 通过给 this.state 赋值对象来初始化内部的state;
- 为事件绑定实例(this);
componentDidMount
componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。
componentDidMount中通常进行哪里操作呢?
-
- 依赖于DOM的操作可以在这里进行;
- 在此处发送网络请求就最好的地方;(官方建议)
- 可以在此处添加一些订阅(会在componentWillUnmount取消订阅);
componentDidUpdate
- componentDidUpdate() 会在更新后会被立即调用,首次渲染不会执行此方法。
- 当组件更新后,可以在此处对 DOM 进行操作;
- 如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求;(例如,当 props 未发生变化时,则不会执行网络请求)。
componentWillUnmount
- componentWillUnmount() 会在组件卸载及销毁之前直接调用。
- 在此方法中执行必要的清理操作;例如,清除 timer,取消网络请求或清除,在 componentDidMount() 中创建的订阅等;
、不常用的生命周期函数
getDerivedStateFromProps
getDerivedStateFromProps
是 React 16.3 引入的一个静态生命周期方法,用于在组件接收到新的 props
时同步更新 state
。
- 作用:确保
state
与props
保持同步,特别是当state
的值完全依赖于props
时。 - 调用时机:在组件初始化、接收到新的
props
或父组件强制更新时被调用。 - 返回值:返回一个对象,表示需要更新的
state
,如果不需要更新则返回null
。
getSnapshotBeforeUpdate
getSnapshotBeforeUpdate
是在 React 更新 DOM 之前调用的一次性生命周期函数,用于获取 DOM 更新前的一些信息(如滚动位置)。
- 作用:在组件更新之前捕获 DOM 的某些状态,以便在更新后使用这些信息。
- 调用时机:在
render
方法之后、DOM 更新之前调用。 - 返回值:返回值将作为
componentDidUpdate
的第三个参数传递。
shouldComponentUpdate
shouldComponentUpdate
是一个性能优化的生命周期函数,用于决定组件是否需要重新渲染。
- 作用:通过返回
true
或false
控制组件的更新,从而避免不必要的渲染。 - 调用时机:在组件接收到新的
props
或state
时,但在render
之前调用。
6、组件之间进行数据传递
父传子:
父组件:
<div><ChildCpn name="蒋乙菥" age="18" height="1,88" />
</div>
子组件:
export class ChildCpn extends React.Component{render(){const {name , age , height} = this.propsreturn (<div><h2>{"姓名" + name + "," + "年龄" + age + "身高" + height}</h2></div>)}}
制更新时被调用。
- 返回值:返回一个对象,表示需要更新的
state
,如果不需要更新则返回null
。
getSnapshotBeforeUpdate
getSnapshotBeforeUpdate
是在 React 更新 DOM 之前调用的一次性生命周期函数,用于获取 DOM 更新前的一些信息(如滚动位置)。
- 作用:在组件更新之前捕获 DOM 的某些状态,以便在更新后使用这些信息。
- 调用时机:在
render
方法之后、DOM 更新之前调用。 - 返回值:返回值将作为
componentDidUpdate
的第三个参数传递。
shouldComponentUpdate
shouldComponentUpdate
是一个性能优化的生命周期函数,用于决定组件是否需要重新渲染。
- 作用:通过返回
true
或false
控制组件的更新,从而避免不必要的渲染。 - 调用时机:在组件接收到新的
props
或state
时,但在render
之前调用。
相关文章:

React---day5
4、React的组件化 组件的分类: 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和…...

Java开发之定时器学习
面试 一、线程池实现定时器 核心代码: public static void main(String[] args) {ScheduledExecutorService scheduledExecutorService Executors.newScheduledThreadPool(5);Runnable runnable () -> System.out.println("当前线程"Thread.current…...

HealthBench医疗AI评估基准:技术路径与核心价值深度分析(上)
引言:医疗AI评估的新范式 在人工智能技术迅猛发展的当下,医疗AI系统已逐渐从实验室走向临床应用。然而,医疗领域的特殊性要求这些系统不仅需要在技术指标上表现出色,更需要在实际临床场景中展现出可靠、安全且有效的性能。长期以来,医疗AI评估领域面临着三个核心挑战:评…...

Windows+VSCode搭建小智(xiaozhi)开发环境
作为一名DIY达人,肯定不会错过最近很火的“小智AI聊天机器人”,网上教程非常丰富,初级玩家可以直接在乐鑫官方下载ESP-IDF安装包并经过简单的菜单式配置后,即可进行代码编译和烧录(详见:Docs)。…...

VueScan Pro v9.8.45.08 一款图像扫描软件,中文绿色便携版
VueScan是著名的第三方底片扫描仪驱动程序,支持市场可见绝大多数型号的底片扫描仪,可以更为灵活地控制扫描过程,更深入地发掘硬件潜力,获取色彩 完美的高质量扫描结果。VueScan支持200种以上的底片类型,在剪取图像时制…...

FreeRTOS通俗理解指南:基础概念 + 架构+ 内核组件+练手实验
RTOS 基础概念 想象一下,你是一个忙碌的厨师,在厨房里同时要完成煎牛排和煮意大利面两项任务。 1.传统单线程模式(没有RTOS) 如果你只能按顺序一项一项地做,就会是这样的过程: 先煎一会儿牛排然后去看看…...
Python后端开发实战:从0到1搭建高可用API服务
引言 Python凭借其简洁的语法和丰富的生态(如Django、Flask、FastAPI等框架),已成为后端开发的主流语言之一。本文将结合一个真实电商API项目,分享从架构设计到部署上线的完整流程,并总结开发过程中常见的坑与最佳实践。 一、实战案例:电商API开发流程 1.1 技术选型 框…...

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块
房屋租赁系统 JavaVue.jsSpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块 百度云盘链接:https://pan.baidu.com/s/16YRGBPsfbd4_HxXhO0jM5Q 密码:smk4 摘 要 房屋是人类生活栖息的重要…...
4、ubuntu系统 | 文本和目录操作函数
1、目录操作函数 ls(列出目录内容) 用途:列出指定目录中的文件和子目录。语法:ls [选项] [路径]常用选项: -l:以长格式显示文件详细信息(权限、所有者、大小、时间等)。-aÿ…...
docker部署ELK,ES开启安全认证
ES启动命令 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:8.17.0 es启动之后需要进入es容器,重置密码 elasticsearch-reset-password -u elastic -i 重置后的密码配置到kibana.yml中,启动kibana docker run …...

ASP.NET MVC添加视图示例
ASP.NET MVC高效构建Web应用- 商品搜索 - 京东 视图(V)是一个动态生成HTML页面的模板,它负责通过用户界面展示内容。本节将修改HelloWorldController类,并使用视图模板文件,以干净地封装生成对客户端的HTML响应的过程…...
自动驾驶中的路径跟踪:Python实现与技术解析
自动驾驶中的路径跟踪:Python实现与技术解析 一、路径跟踪是什么?为什么它至关重要? 路径跟踪(Path Tracking)是自动驾驶系统的关键部分之一,它负责确保车辆能够沿着预定义的轨迹行驶,同时稳定控制转向角度和速度。一个好的路径跟踪算法需要具备以下特点: 精准度:能…...
前端面试题目-高频问题集合
1.CSS里面水平垂直居中的方法 1.CSS里面水平垂直居中的方法弹性布局display: flex; /*先开启flex布局*/justify-content: center; /*实现水平居中*/jalign-items: center; /*实现垂直居中*/网格布局display: grid; /*先开启grid布局*/plac…...
MyBatis源码解析:从 Mapper 接口到 SQL 执行的完整链路
MyBatis源码解析:从 Mapper 接口到 SQL 执行的完整链路 一、Mapper 代理对象的创建:sqlSession.getMapper(UserMapper.class)二、接口方法的执行:mapper.selectUser("coderzpw", 18)2.1 四大核心组件解析2.1.1 Executor(…...

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Form Wave(表单label波动效果)
📅 我们继续 50 个小项目挑战!—— FormWave组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ 🎯 组件目标 构建一个美观、动态的登录表单࿰…...

双目相机深度的误差分析(基线长度和相机焦距的选择)
全文基于针孔模型和基线水平放置来讨论 影响双目计算深度的因素: 1、基线长度:两台相机光心之间距离2、相机焦距(像素): f x f_x fx(或 f y f_y fy)为焦距 f f f和一个缩放比例的乘积。在…...

Pytorch Geometric官方例程pytorch_geometric/examples/link_pred.py环境安装教程及图数据集制作
最近需要训练图卷积神经网络(Graph Convolution Neural Network, GCNN),在配置GCNN环境上总结了一些经验。 我觉得对于初学者而言,图神经网络的训练会有2个难点: ①环境配置 ②数据集制作 一、环境配置 我最初光想…...

React---day6、7
6、组件之间进行数据传递 **6.1 父传子:**props传递属性 父组件: <div><ChildCpn name"蒋乙菥" age"18" height"1,88" /> </div>子组件: export class ChildCpn extends React.Component…...

hook组件-useEffect、useRef
hook组件-useEffect、useRef useEffect 用法及执行机制 WillMount -> render -> DidMount ShouldUpdate -> WillUpdate -> render -> DidUpdate WillUnmount(只有这个安全) WillReceiveProps useEffect(callback) 默认所有依赖都更新useEffect(callback, [])&am…...
功能结构整理
C# Sxer Sxer.Base:基础子功能 Sxer.Base.Debug:打印 Sxer.Utility:工具类 Sxer.CustomFunction:独立功能点开发 Unity...
企业级开发中的 maven-mvnd 应用实践
1. 引言:Maven 在企业级开发中的挑战 1.1 Maven 构建的常见痛点 在大型 Java 项目中,Maven 是主流的构建工具,但随着项目的复杂度增加,其性能瓶颈逐渐显现: 构建速度慢:每次执行 mvn clean install 都需要重新加载插件和依赖。重复构建浪费资源:即使未修改源码,仍会触…...
yolov12毕设前置知识准备 1
1 什么是目标检测呢? 目标检测(Object Detection)主要用于识别图像或视频中特定类型物体的位置,并标注其类别。 简单来说,就是让计算机像人类一样 “看懂” 图像内容,不仅能识别出物体(如人、…...

随机游动算法解决kSAT问题
input:n个变量的k-CNF公式 ouput:该公式的一组满足赋值或宣布没有满足赋值 算法步骤: 随机均匀地初始化赋值 a ∈ { 0 , 1 } n a\in\{0,1\}^n a∈{0,1}n.重复t次(后面会估计这个t): a. 如果在当前赋值下…...

《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡
《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡 第一节 从康盛创想到腾讯收购:PC时代的辉煌 1.1 Discuz! 的诞生:康盛创想的开源梦想 2001年,中国互联网正处于萌芽阶段,个人网站和论坛开始兴起。…...
azure web app创建分步指南系列之一
什么是 Azure Web 应用? Azure Web 应用是 Azure 应用服务的一部分,是一个完全托管的平台,用于开发、部署和扩展 Web 应用程序。它支持各种编程语言和框架,例如 .NET、Java、Python、PHP 和 Node.js,使开发人员能够构建强大的 Web 应用程序,而无需担心底层基础架构。借助…...
PyTorch实战——基于生成对抗网络生成服饰图像
PyTorch实战——基于生成对抗网络生成服饰图像 0. 前言1. 模型分析与数据准备2. 判别器3. 生成器4. 模型训练5. 模型保存与加载相关链接0. 前言 我们已经学习了生成对抗网络 (Generative Adversarial Network, GAN) 的工作原理,接下来,将学习如何将其应用于生成其他形式的内…...

笔试强训:Day6
一、小红的口罩(贪心优先级队列) 登录—专业IT笔试面试备考平台_牛客网 #include<iostream> #include<queue> #include<vector> using namespace std; int n,k; int main(){//用一个小根堆 每次使用不舒适度最小的cin>>n>&…...
【Hexo】4.Hexo 博客文章进行加密
安装 npm install --save hexo-blog-encrypt1-快速使用 将“ password”添加到您的文章信息头就像这样: password: 123456 ---2-按标签加密 1.修改文章信息头如下: title: Hello World tags: - 加密文章tag date: 2020-03-13 21:12:21 password: muyiio…...
Android --- ObjectAnimator 和 TranslateAnimation有什么区别
文章目录 2. 作用范围和功能2. 动画表现3. 是否修改 View 的属性4. 适用场景5. 性能总结: ObjectAnimator 和 TranslateAnimation 都是 Android 中常用的动画类型,但它们有以下几个关键的区别: 2. 作用范围和功能 ObjectAnimator:…...
小白的进阶之路系列之四----人工智能从初步到精通pytorch自定义数据集下
本篇涵盖的内容 在之前的文章中,我们已经讨论了如何获取数据,转换数据以及如何准备自定义数据集,本篇文章将涵盖更加深入的问题,希望通过详细的代码示例,帮助大家了解PyTorch自定义数据集是如何应对各种复杂实际情况中,数据处理的。 更加详细的,我们将讨论下面一些内容…...