初识React
在最新写需求的时候,我遇到了一个需求,这个需求改后端改的不算多,而且也比较简单,但是在改前端的时候,很复杂。因为我们这个项目用的是React做前端的,而我对于前端知识没有了解,所以理解很多代码都很困难,更别说写了。在我们这个项目中,不仅仅用到了React这么简单,还用到了Taro, TypeScript,Taro UI,ES6+ 语法。但是我觉得一个个去学不成办法,因为这样的话学习周期太长了,而这个需求越快搞定越好。之前睿哥在教我的时候,和我说了这样一句话:“你说你这里不懂,那你为什么不把这里搞懂呢?问AI啊!”所以这次,我也是试着用一种新的方法来学习前端的知识,我选了一个index.tsx文件,遇到不懂的代码就问AI,一条一条的去理解,这样说不定是掌握前端这么多知识的一种方法。
这段代码的意思是:
首先创建一个state对象,state对象包含了多个字段,每个字段都有具体的值。
然后指定state对象的类型为PropsType,PropsType是一个预先定义的TypeScript类型,描述了state对象的结构和字段类型。
接下来,我们研究一下PropsType:
type PropsType = {loadMore: 'more' | 'noMore' | 'loading' | undefined;[key: string]: any;
};
-
loadMore
字段:- 必须存在,且其值必须是
'more'
、'noMore'
、'loading'
或undefined
之一。
- 必须存在,且其值必须是
-
索引签名
[key: string]: any;
:- 允许对象具有任意数量的其他属性。
- 这些属性的键(
key
)必须是字符串类型。 - 这些属性的值(
any
)可以是任意类型。
所以总结一下这段代码:
- 创建对象:通过
state: PropsType = { ... }
,你创建了一个名为state
的对象。 - 类型约束:使用
PropsType
类型约束state
对象,确保它至少包含loadMore
字段,并且可以包含其他任意数量的字段。
接下来是第二段代码:
这段代码是一个生命周期方法。这段代码展示了一个典型的 React 组件在挂载时进行初始化和事件监听的过程。通过监听路由事件并处理参数,它能够动态地更新组件状态和界面显示。这种模式需要根据路由参数动态更新组件内容。
详细说明
-
componentDidMount
方法:- 这是 React 组件的生命周期方法,当组件被挂载到 DOM 中后会立即调用这个方法。
- 在这里,它首先调用了
this.getBaseDefineOption()
方法,可能是用于初始化一些基础数据。
-
监听路由事件:
- 使用
eventCenter.on
方法监听路由的onShow
事件。 - 当路由的
onShow
事件被触发时,执行回调函数。
- 使用
-
处理路由参数:
- 在回调函数中,首先获取路由参数
params
。 - 如果
params
存在,根据params
中的reporterId
和realExectorId
设置导航栏标题。 - 使用
this.setState
方法更新组件状态,包括deviceId
、deviceCode
、reporterId
和realExectorId
。 - 状态更新后,通过回调函数调用
this.getList()
方法获取列表数据。
- 在回调函数中,首先获取路由参数
-
无参数处理:
- 如果
params
不存在,直接调用this.getList()
方法。
- 如果
这段代码中有几个需要注意的点:
1、if (params.reporterId)中,params.reporterId返回的应该是true或者false,而不是一个具体的数。
2、() => {}
是 JavaScript 中的箭头函数语法。箭头函数是 ES6引入的一种更简洁的函数定义方式。关于箭头函数,最主要的应该就是,箭头函数不会创建自己的 this
,它会捕获上下文的 this
值。对于需要在回调中保持 this
上下文的情况非常有用。比如这个代码,这个getList()方法就是下文的,用了this就可以在箭头函数使用了,换句话说getList()方法不是在箭头函数创建的,是从上下文拿的。
接下来看第三段代码:
1. 判断是否还有更多数据
这段代码首先检查 this.state.loadMore
是否等于 'noMore'
。如果 loadMore
的值是 'noMore'
,说明已经没有更多数据可以加载了,方法会立即返回,不会执行后续的代码。
2. 更新状态
this.setState
用于更新组件的状态(state
)。loadMore
被设置为 'loading'
,表示正在加载更多数据。更新 page
对象,将 current
页码加 1,表示要加载下一页的数据。
3. 回调函数
setState
的第二个参数是一个回调函数,在状态更新完成后执行。这个回调函数调用了 this.getList(true)
方法,传递参数 true
,通常表示要追加数据到现有列表中,而不是替换现有数据。
接下来看第四段代码:
这段代码定义了一个handleLoading的函数,方便接下来被调用。其中,这里的type是这个意思:
也就是说,在后面调用的时候,你需要传一个参数(true或者false)给handleLoading,然后才能够执行handleLoading()方法。
接下来看第六段代码:
getList = (type?) => {this.handleLoading(true);const {searchType,deviceCode,deviceId,reporterId,realExectorId,} = this.state;let params: any = {...this.state.page,};if (type && type.execStatus) {params.execStatus = type.execStatus;} else {params.statusSet = searchType;}if (deviceId) {params.deviceId = deviceId;}if (deviceCode) {params.deviceCode = deviceCode;}if (reporterId) {params.reporterId = reporterId;}if (realExectorId) {params.realExectorId = realExectorId;}if (type) {params = {...params,...this.state.page,};}getFaultCenterList(params).then((result) => {if (result?.code === SUCCESS) {if (type) {this.setState({listData: [...this.state.listData, ...result.data.list],loadMore: result.data.list.length > 0 ? 'more' : 'noMore',});} else {this.setState({listData: result.data.list,loadMore: result.data.total <= 10 ? 'noMore' : 'more',actionSheetIsOpen: false,page: { ...this.state.page, current: 1 },});}}this.handleLoading(false);}).catch(() => {this.setState({listData: [],loadMore: 'noMore',});this.handleLoading(false);});};
可以看到getList方法也有一个type,不过type之后有一个问号:
意思应该就是,如果你接下来需要使用getList方法的话,你可以传值,也可以不传值。
这一块是解构赋值。
在我的 getList
方法中,解构赋值的结果可以直接用于构造请求参数 params
,从而简化代码。
这一小块代码意思是初始化请求的参数。
这一小块代码意思是,根据 type
参数设置请求的状态参数。如果 type
存在且包含 execStatus
属性,则将其添加到请求参数中;否则,使用 searchType
。
这块代码的意思是看看有没有其他条件参数,有的话顺便把这些参数添加到params中,没有就跳过这段代码。
这段代码相对复杂一点,
getFaultCenterList(params)//发起请求
相关文章:

初识React
在最新写需求的时候,我遇到了一个需求,这个需求改后端改的不算多,而且也比较简单,但是在改前端的时候,很复杂。因为我们这个项目用的是React做前端的,而我对于前端知识没有了解,所以理解很多代码…...

VUE 开发——AJAX学习(三)
一、async函数和await async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用Promise async写在函数声明的前面;在async函数内,使用await关键字,获取Promise对象“成功状态”结果值 &…...

C++杂项
作业: 将之前实现的顺序表、栈、队列都更改成模板类 顺序表 #include <iostream>using namespace std;template<typename T>class SeqList { private:T *ptr;int size; //总长度int len 0; //当前顺序表实际长度public://初始…...

Gelatinous Cube Sphere - Bonus Files 2 - Atavism
这是Gelatinous Cube & Sphere Pack的奖励文件包。 奖励文件: ⭐ 概念艺术 也可在Monster Bundle #2中使用。 下载:Unity资源商店链接资源下载链接...

锐捷—NAT地址映射+IPsec隧道
任务目标 在出口路由器R3上将R5私网地址1对1映射的公网地址与R1建立IPsec隧道,使得R4在访问R5的映射公网地址时,可以进行IPsec隧道的转发 要求: 1、R4和R5可通过NAT转换正常访问互联网地址(R2的lo0) 2、R5的私网地…...
index.html 调用 ajax
index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>AJAX 请求示例</title><script>// 封装 Ajax 为公共函数:传入回调函数 success 和 failfunction myAjax (url, suc…...

uniapp学习(003-1 vue3学习 Part.1)
零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第11p-第p14的内容 文章目录 vue3使用介绍插值表达式例子时间戳随机数输出函数的值 ref响应式数据变量v-bind 绑…...

计算机毕业设计 基于深度学习的短视频内容理解与推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
JavaScript网页设计案例深度解析:从理论到实践
前言 在现代前端开发中,JavaScript 是赋予网页生命的关键技术。静态的 HTML 和 CSS 虽然能创建美观的页面,但当我们需要增强用户交互和页面响应时,JavaScript 无疑成为最得力的工具。从程序员的角度来看,JavaScript 设计不仅仅是…...

spark-sql建表数据同步到hive
1、基础环境 组件版本备注hadoop3.4.0官方下载hive3.1.3自编译sparkspark-3.5.3-bin-hadoop3官方下载,需要内置hive的jar相关内容paimon0.9.0Maven官方下载jdk1.8.0_41maven3.9.6固定版本 2、停止服务、清理日志 先停止,清理数据 sudo kill -9 $(ps -ef…...
Django上下文处理器
1创建 (如frontend目录下)category_processors文件: def categories(request):from backend.models import Categorycategory_list Category.objects.all()return {category_list:category_list}这里,必须返回一个字典。 2&…...

旭升集团携手纷享销客,构建全方位客户关系管理平台
宁波旭升集团股份有限公司(以下简称“旭升集团”)自2003年成立,总部位于中国宁波,集团设有压铸、锻造、挤压、集成四大事业部,在亚洲、欧洲、美洲等地均设立研发中心及制造基地,产品主要覆盖新能源汽车的电…...

uniapp 知识点
自定义导航 在page.json navigationstyle":"custom"navigateTo传参 页面传参只能onLoad(option)里面拿 px和upx的关系 在750设计图中,1px1upx 路由 navigateBack返回上一页 重定向 其实就是把当前页面干掉了 公共组件和页面共同点 computed,watc…...

慢病中医药膳养生食疗管理微信小程序、基于微信小程序的慢病中医药膳养生食疗管理系统设计与实现、中医药膳养生食疗管理微信小程序的开发与应用(源码+文档+定制)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
解决 Android WebView 无法加载 H5 页面常见问题的实用指南
目录 1. WebView 简介 2. 常见问题 3. 网络权限设置 4. 启用 JavaScript 5. DOM Storage 的重要性 6. 处理 HTTPS 问题 7. 设置 WebViewClient 8. 调试工具 9. 其他调试技巧 10. 结论 相关推荐 1. WebView 简介 Android WebView 是一种视图组件,使得 And…...

Ollama本地部署大模型及应用
文章目录 前言一、下载安装1.Mac2.Windows3.linux4.docker5.修改配置(可选)1.linux系统2.window 系统3.mac系统 二、Ollama使用1.命令2.模型下载3.自定义模型4.API 服务 三、Open WebUI 使用四、Dify使用 前言 Ollama 是一个专注于本地部署大型语言模型…...

读代码UNET
这个后面这个大小怎么算的,这参数怎么填,怎么来的? 这是怎么看怎么算的? 这些参数设置怎么设置?卷积多大,有什么讲究?...

【java】前端RSA加密后端解密
目录 1. 说明2. 前端示例3. 后端示例3.1 pom依赖3.2 后端结构图3.3 DecryptHttpInputMessage3.4 ApiCryptoProperties3.5 TestController3.6 ApiCryptoUtil3.7 ApiDecryptParamResolver3.8 ApiDecryptRequestBodyAdvice3.9 ApiDecryptRsa3.10 ApiCryptoProperties3.11 KeyPair3…...

机器学习 | Scikit Learn中的普通最小二乘法和岭回归
在统计建模中,普通最小二乘法(OLS)和岭回归是两种广泛使用的线性回归分析技术。OLS是一种传统的方法,它通过最小化预测值和实际值之间的平方误差之和来找到数据的最佳拟合线。然而,OLS可以遭受高方差和过拟合时&#x…...
代码随想录冲冲冲 Day60 图论Part11
97. 小明逛公园 floyd算法 其实就是先用i和j拼成一个平面 然后看每次从i到j距离 这里分两种情况 1.中间没有经过别的点 2.中间有经过别的点 那么最小步数就要取这两个的最小值 所有根本逻辑是i j确定一个面 再通过不同的k去看每一个中间点 所以k要在最外层 上一次的值要…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...