React 知识回顾(HOC、合成事件、Fiber)
HOC
嗯,用户问的是HOC是什么以及它能用来做什么。我需要先理解HOC的基本概念,然后整理它的用途。根据搜索结果,HOC是React中的高阶组件,用来复用逻辑。网页1提到HOC是一个函数,接收组件返回新组件,属于设计模式,不是React的API。网页2和3也确认了这点,HOC通过组合特性增强组件功能。
接下来HOC的用途,网页1提到强化props、条件渲染、性能优化、事件赋能、反向继承。网页2举了条件渲染的例子,比如加载状态和权限控制。网页3补充了复用代码、渲染劫持、生命周期劫持。网页4讨论了HOC的理论来源是函数式编程的组合,而网页5列举了权限控制、增强功能、数据获取等应用场景。
需要综合这些信息,将用途分成几个主要类别,如复用逻辑、增强功能、条件控制、性能优化等。同时要注意引用不同的网页来源,比如网页1和网页2都提到了条件渲染和权限控制,网页5提到了权限控制的具体实现。可能还需要对比HOC和其他模式,如Hooks,但用户没问这个,可能简要提及。
另外,注意事项部分,网页3提到属性代理和反向继承的区别,网页5提到静态方法丢失和ref转发的问题,但用户问题不涉及这些,可能不用包含。需要保持回答简洁,涵盖主要点并引用正确的来源。
高阶组件(HOC,Higher-Order Component) 是 React 中用于复用组件逻辑的一种高级设计模式。它本质上是一个函数,接收一个组件作为参数,并返回一个经过功能增强的新组件。HOC 本身并非 React 的 API,而是基于 React 的组合特性形成的模式。
HOC 的核心作用
1. 逻辑复用
• HOC 可以将多个组件共用的逻辑(如数据获取、权限校验、日志记录等)抽象成独立的高阶函数,减少代码重复。
• 示例:复用加载状态逻辑。通过 HOC 包裹组件,自动处理加载中的 UI 展示和数据返回后的渲染。
2. 增强组件功能
• 强化 Props:向被包裹组件注入额外的属性。例如,为所有子组件统一添加用户信息字段。
• 事件赋能:通过 HOC 管理事件逻辑,如表单提交、状态同步等。例如,HOC 可以统一处理按钮点击的埋点统计。
• 性能优化:通过缓存、记忆化(Memoization)或生命周期控制优化渲染性能。
3. 条件控制与渲染劫持
• 条件渲染:根据特定条件决定是否渲染组件。例如:
◦ 权限控制:根据用户权限显示或隐藏组件。
◦ 懒加载:动态加载组件前显示加载动画。
• 渲染劫持:修改组件的渲染输出。例如,在组件外层包裹错误边界或统一样式容器。
4. 状态管理
• 抽离组件的状态逻辑,实现非受控组件到受控组件的转换。例如,通过 HOC 统一管理表单输入的状态。
• 结合 Redux 等状态管理库,将全局状态注入组件(如 connect 函数)。
5. 生命周期劫持
• 监听或修改组件的生命周期行为。例如:
◦ 记录组件的渲染时间或错误信息。
◦ 在组件挂载前后执行特定逻辑(如数据预加载)。
典型应用场景
1. 权限控制
通过 HOC 包裹需要鉴权的组件,根据用户权限动态决定是否渲染内容。
2. 全局加载状态
统一处理异步数据加载时的加载动画展示。
3. 跨组件数据注入
例如,为多个组件注入用户信息或主题配置。
4. 代码复用与逻辑抽象
抽取表单验证、埋点统计等通用逻辑。
5. 第三方库集成
如 Redux 的 connect 或 React Router 的 withRouter,均通过 HOC 实现功能扩展。
HOC 的局限性
• 嵌套复杂度高:多层 HOC 嵌套可能导致调试困难。
• 静态方法丢失:HOC 包裹组件时,原组件的静态方法需手动传递。
• 函数组件限制:传统 HOC 更适用于 Class 组件,函数组件中可通过 Hooks 替代部分场景。
总结
HOC 是 React 中实现逻辑复用的重要模式,尤其适合跨组件增强功能或统一处理通用逻辑。尽管现代 React 更推荐使用 Hooks 实现类似功能,但 HOC 在复杂场景(如高阶权限控制、全局状态注入)中仍有其独特价值。实际开发中,需根据需求选择最合适的方案。
Fiber
嗯,用户现在问了三个关于React Fiber的问题,分别是12、13、14。我需要仔细看看每个问题对应的搜索结果,然后综合起来回答。
首先看第12题,React Fiber的作用和原理。根据搜索结果,比如网页1提到Fiber树是React 16引入的新协调算法,取代了之前的栈协调器,支持增量渲染。网页2和4也提到Fiber的目标是拆分任务,允许中断和恢复,提高响应性。网页7和13则解释了Fiber的数据结构,每个Fiber节点代表一个工作单元,使用链表结构连接,这样可以在遍历时暂停和恢复。需要把这些点综合起来,说明Fiber的作用是解决主线程阻塞,通过任务分片和优先级调度实现高效更新。
然后是第13题,React的任务调度。网页8提到调度器使用优先队列,分为TaskQueue和TimerQueue,用最小堆结构管理任务优先级。网页11和12说React实现了自己的调度机制,类似requestIdleCallback,但用MessageChannel来模拟,确保任务在空闲时执行。时间分片也是关键,每个任务单元执行完后检查剩余时间,决定是否继续。网页9还提到双缓冲技术和工作循环,这些都需要结合起来说明调度过程。
第14题,判断浏览器剩余时间。根据网页7、13和14,React并没有直接使用requestIdleCallback,而是用polyfill,比如MessageChannel来模拟空闲周期。调度器通过performance.now()计算时间片,默认5ms,执行任务时检查是否超时,超时则让出主线程。网页8中的源码分析提到shouldYield函数基于过期时间和当前时间判断是否需要暂停。需要把这些机制解释清楚,说明React如何估算剩余时间并决定任务中断。
要注意每个问题的答案要引用多个网页的信息,确保覆盖全面,同时保持结构清晰。比如Fiber的原理部分要结合网页1、2、4、6;任务调度引用8、11、12;剩余时间判断引用7、8、13、14。使用引用编号时注意对应的网页内容,避免错误。最后整理成三个部分,每个问题分点回答,引用相关来源。
12. React Fiber 的作用和原理
作用
React Fiber 是 React 16 引入的全新协调算法(Reconciler),核心目标是解决传统栈协调器(Stack Reconciler)的同步阻塞问题,通过任务分片和优先级调度实现以下能力:
1. 增量渲染:将大型更新拆分为多个小任务,分散到多帧执行,避免长时间占用主线程导致卡顿。
2. 可中断与恢复:高优先级任务(如用户输入)可打断低优先级任务(如数据计算),保证交互流畅性。
3. 并发模式支持:为 Suspense、过渡更新等高级特性提供底层支撑。
原理
• 数据结构:Fiber 是虚拟 DOM 的扩展,每个 Fiber 节点对应一个组件或 DOM 元素,存储其状态、副作用(如 DOM 操作)及优先级信息。
• 链表遍历:Fiber 树通过 child、sibling、return 指针形成链表结构,替代递归遍历,支持随时中断和恢复。
• 双缓冲机制:维护两棵 Fiber 树(current 和 workInProgress),更新时先在内存中构建新树,完成后原子性切换,避免渲染中间状态。
13. React 的任务调度机制
React 的任务调度基于优先级分片和时间切片实现,核心流程如下:
1. 优先级划分:
• 任务分为 5 级:Immediate(用户交互)、UserBlocking(动画)、Normal(常规更新)、Low(数据预加载)、Idle(后台任务)。
• 高优先级任务抢占执行权,低优先级任务可能被延迟或丢弃。
2. 任务队列管理:
• TaskQueue:存放立即执行的任务,按优先级排序(最小堆实现,时间复杂度 O(1))。
• TimerQueue:存放延迟任务,通过 setTimeout 触发加入 TaskQueue。
3. 调度循环:
• 使用 MessageChannel 或 requestAnimationFrame 模拟 requestIdleCallback,在浏览器空闲时执行任务。
• 每次处理一个任务单元(如一个 Fiber 节点),检查剩余时间(默认 5ms),超时则归还主线程。
14. React 如何判断浏览器剩余时间
React 通过时间切片(Time Slicing)估算浏览器剩余可用时间,具体实现包括:
1. 时间片定义:
• 默认单帧时间片为 5ms(基于 60Hz 屏幕的 16.6ms 帧率),确保高优先级任务及时响应。
2. 剩余时间计算:
• 使用 performance.now() 获取精确时间戳。
• 调度器维护任务的 expirationTime(过期时间),通过对比当前时间与过期时间判断是否需让出主线程。
3. 中断条件:
• shouldYield() 函数:若当前时间超过任务过期时间,或剩余时间不足处理下一个任务单元,则暂停执行。
• 中断后通过调度器重新安排任务执行。
总结
React Fiber 通过链表遍历和优先级调度实现高效的任务管理,结合时间切片优化交互响应。其调度机制基于双队列和最小堆,确保高优先级任务优先执行,而剩余时间计算则通过精准的时间戳和中断策略平衡性能与用户体验。
合成事件
嗯,用户问的是React的合成事件,以及为什么不直接绑在元素上。首先,我需要回忆一下React合成事件的基本概念。根据之前的搜索结果,合成事件是React对原生事件的封装,用来统一不同浏览器的事件处理,提高性能和兼容性。
然后,用户的问题还涉及到为什么不直接绑定到元素上。记得在搜索结果里提到,React使用事件委托机制,把所有事件绑定到根节点或document,而不是每个具体的元素。这可以优化性能,减少内存消耗,同时方便统一管理事件。
接下来,需要整合各个搜索结果里的信息。比如,网页2提到合成事件的工作原理,事件代理到根节点;网页4和网页7详细解释了事件委托和事件池机制;网页5和网页8讨论了React 17之后的变化,比如事件委托到根容器而不是document,以及移除了事件池。此外,网页6和网页7对比了合成事件和原生事件的区别,包括执行顺序和阻止冒泡的问题。
现在要组织答案的结构。首先解释合成事件是什么,然后说明其核心机制,比如事件委托、兼容性处理、性能优化。接着回答为什么不直接绑在元素上,分点列出原因:性能优化(减少事件监听器数量)、事件池管理、兼容性统一,以及支持React的高级特性如并发模式。
需要确保每个部分都有对应的引用。例如,事件委托的机制在网页2、4、5、7、8都有提到,可以引用多个网页。事件池在网页3、4、5、6提到。兼容性方面在网页2、4、8都有说明。性能优化方面,网页4、5、6、7都有涉及。
还要注意React 17的变化,比如事件绑定到根容器而不是document,这在网页5和网页8里提到。同时,移除事件池在网页5提到,需要说明在React 17之后的变化。
最后,确保答案结构清晰,分点明确,引用正确,覆盖用户的问题点,并且语言流畅。避免重复引用同一个网页,尽可能综合多个来源的信息,比如事件委托的原因结合网页2、4、5、7、8的内容,性能优化部分结合网页4、5、6、7,兼容性结合网页2、4、8等。
React 合成事件的核心机制与设计原理
1. 合成事件的定义与作用
React 合成事件(SyntheticEvent)是 React 对浏览器原生事件的跨平台封装,目的是提供一致的事件处理接口,消除浏览器差异(如 IE 与现代浏览器的事件模型区别)。例如,onClick 事件在底层会被转换为 click 事件的统一处理,开发者无需关注 addEventListener 的具体实现差异。
2. 合成事件的实现机制
(1) 事件委托(Event Delegation)
React 不会将事件直接绑定到具体元素(如 <button>),而是通过事件冒泡将所有事件委托到根节点(React 17 前是 document,17 后是 React 应用的根 DOM 容器)。例如,点击按钮时,事件会冒泡到根节点,React 通过 event.target 找到触发事件的组件,再执行对应的处理函数。
优势:
• 性能优化:仅需一个全局监听器,避免为每个元素单独绑定事件,减少内存占用(尤其对动态列表或复杂 UI 场景)。
• 动态组件支持:组件动态挂载/卸载时,无需手动绑定/解绑事件。
(2) 事件池(Event Pooling)
React 17 前,合成事件对象会被复用以提升性能。事件处理完成后,事件对象属性会被重置,若在异步操作中访问事件属性需调用 event.persist() 保留对象。React 17 后移除了事件池机制,开发者无需手动处理。
(3) 统一的事件对象
合成事件对象 SyntheticEvent 提供与原生事件一致的 API(如 preventDefault()、stopPropagation()),并抹平浏览器兼容性问题(如 event.target 的标准化)。
为何不直接绑定到元素?
React 选择事件委托而非直接绑定到元素,主要基于以下原因:
1. 性能优化
• 减少事件监听器数量:若为每个 <button> 单独绑定 onClick,1000 个按钮需创建 1000 个监听器;而事件委托仅需一个全局监听器。
• 避免频繁的 DOM 操作:动态组件(如列表渲染)中,直接绑定需在每次更新时重新挂载事件,而事件委托天然支持动态组件。
2. 内存管理与垃圾回收
直接绑定事件会导致大量事件监听器占用内存,而事件委托通过复用根节点的监听器,显著降低内存消耗。在 React 17 前,事件池机制进一步减少对象创建开销。
3. 浏览器兼容性统一
不同浏览器对原生事件的支持差异较大(如 IE 的 attachEvent 与现代浏览器的 addEventListener)。合成事件通过封装统一 API,开发者无需编写兼容性代码。
4. 支持 React 高级特性
• 异步渲染与并发模式:事件委托允许 React 在调度任务时优先处理高优先级事件(如用户输入),而直接绑定可能阻塞渲染流程。
• 跨平台扩展:合成事件层为 React Native、SSR 等场景提供统一的事件模型。
合成事件与原生事件的交互问题
若混合使用合成事件与原生事件,需注意:
1. 执行顺序:原生事件(如 document.addEventListener('click'))的捕获阶段先于合成事件执行,冒泡阶段后于合成事件。
2. 阻止冒泡冲突:原生事件中调用 event.stopPropagation() 可能阻止合成事件触发(因合成事件依赖冒泡到根节点)。
最佳实践:避免混用,优先使用合成事件;若必须使用原生事件,需在 componentDidMount 中手动绑定、componentWillUnmount 中解绑。
总结
React 合成事件通过事件委托与统一封装,解决了性能、兼容性、动态组件支持等核心问题,是 React 高效渲染与跨平台能力的重要基础。其设计权衡了开发体验与运行时效率,尤其适合复杂应用的规模化开发。
相关文章:
React 知识回顾(HOC、合成事件、Fiber)
HOC 嗯,用户问的是HOC是什么以及它能用来做什么。我需要先理解HOC的基本概念,然后整理它的用途。根据搜索结果,HOC是React中的高阶组件,用来复用逻辑。网页1提到HOC是一个函数,接收组件返回新组件,属于设计…...
hive相关面试题以及答案
什么是Hive?它的作用是什么? 答:Hive是一个建立在Hadoop之上的数据仓库工具,它提供了类似于SQL的查询语言HiveQL来操作存储在Hadoop中的数据。Hive的主要作用是让用户能够使用SQL语法来查询和分析大规模数据集。 Hive的架构是什么…...
Jmeter-负载测试
目录 一. 基础负载测试场景:固定并发用户数 1、线程组配置 2、HTTP请求配置 3、添加定时器 4、添加监听器 4.1 聚合报告 4.2 响应时间图 4.3 查看结果树 5、结果分析指标 二. 阶梯式加压场景(逐步增加并发) 1、插件安装 2、阶梯配…...
《深度剖析SQL数据类型转换:隐式与显式的奥秘》
在SQL的世界里,数据类型转换是一个基础且关键的操作,它贯穿于数据库开发、管理与数据分析的各个环节。数据类型转换分为隐式转换和显式转换,二者各有特点与应用场景,深刻理解它们对于编写高效、稳定的SQL代码至关重要。 一、数据…...
基于大模型的自发性气胸全方位预测与诊疗方案研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型预测自发性气胸的原理及技术基础 2.1 大模型介绍 2.2 模型构建与训练数据 2.3 模型训练与优化 三、术前风险预测与准备 3.1 术前风险预测指标 3.2 基于预测的术前准备 3.3 手术方案与麻醉方案制定…...
经销商订货管理系统小程序PHP+uniapp
订货管理系统的行业变革势能 在实体商业与电商融合加速的2025年,订货管理系统已成为连锁品牌、商贸批发企业及工厂客户的核心数字化基建。面对经销商订货流程冗长、加盟商库存协同低效、批发贸易数据孤岛等行业痛点,新一代系统通过ThinkPHPUniapp技术架…...
性能测试理论基础-测试流程及方案设计要点
需求调研 因性能测试技术性和专业性要求比较高,通常需要性能测试人员参与需求调研和确认。 需求调研阶段,通常需要确认以下信息: 项目背景、测试范围、业务逻辑 & 数据流转(与开发确认)、系统架构、软硬件配置信息、 测试数据量(量级要一致)、外部依赖(第三方系统…...
TextGrad:案例
原文:Yuksekgonul, M., Bianchi, F., Boen, J. et al. Optimizing generative AI by backpropagating language model feedback. Nature 639, 609–616 (2025). https://doi.org/10.1038/s41586-025-08661-4 目录 Solution optimizationPrompt optimization for rea…...
kafka 4.x docker启动kafka4.0.0 docker-compose启动最新版kafka 如何使用docker容器启动最新版kafka
1. 镜像选择标签: https://hub.docker.com/r/bitnami/kafka/tags 2. 命令: docker pull bitnami/kafka:4.0.0 3. docker-compose.yml 启动kafka4.0.0: version: 3services:kafka:image: bitnami/kafka:4.0.0container_name: kafkaports:- &…...
Next.js 中间件鉴权绕过漏洞 (CVE-2025-29927) 复现利用与原理分析
免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用; 任何个人/组织须在合法合规前提下实施,严禁用于非法目的; 作者不对任何滥用行为及后果负责,如发现新漏洞请及时联系厂商并遵循漏洞披露规则。 漏洞原理 Next.js 是一个…...
C#Lambda表达式与委托关系
1. 核心关系图示 A[委托] --> B[提供方法容器] B --> C[Lambda表达式] C --> D[委托实例的语法糖] A --> E[类型安全约束] C --> F[编译器自动生成委托实例] 2. 本质联系 2.1 类型关系 Lambda表达式是编译器生成的委托实例表达式自动匹配符合签名的…...
AOA与TOA混合定位,MATLAB例程,自适应基站数量,三维空间下的运动轨迹,滤波使用EKF
本代码实现了一个基于 到达角(AOA) 和 到达时间(TOA) 的混合定位算法,结合 扩展卡尔曼滤波(EKF) 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络,展示了从信号测量、定位解算到轨迹滤波的全流程,适用于城市峡谷、室内等复杂环境下的定位研究。 文…...
Uni-app入门到精通:subPackages节点为小程序的分包加载配置
subPackages节点用于为小程序的分包加载配置。因小程序有体积和资源加载限制,各小程序平台提供了分包方式,以加快小程序的下载和启动速度。主包用于放置默认启动页面、babBar页面,以及一些所有分包都会用到的公共资源或JS脚本;而分…...
如何编写单元测试
一、前言知识 1.开发过程 需求分析->设计->开发->测试->上线 2.测试种类 单元测试(测试模块编码)、黑盒测试(测试功能是否满足需求)、白盒测试(测试程序内部的逻辑结构)、回归测试(提出的缺陷进行二次验证)、集成测试(测试主要的业务功能及模块间的整合性)、系…...
Linux系统编程 | 线程的基本概念
💓个人主页:mooridy 💓专栏地址:Linux 关注我🌹,和我一起学习更多计算机的知识! 🔝🔝🔝 什么是线程 程序中的一个执行路线就叫做线程 一个进程至少要有一个执行线程,单…...
C语言之数据结构:双向链表
个人主页:云纳星辰怀自在 座右铭:“所谓坚持,就是觉得还有希望!” 前言 前文阐述了数据结构中单向链表的定义、分类和实际应用。本文将重点阐述带哨兵节点的双向循环链表。 1. 带头双向循环链表 带头双向循环链表 是一种特殊的链…...
剑指Offer62 -- 约瑟夫环
1. 题目描述 圆圈中最后剩下的数字 2. 约瑟夫环 人们站在一个等待被处决的圈子里。 计数从圆圈中的指定点开始,并沿指定方向围绕圆圈进行。 在跳过指定数量的人之后,处刑下一个人。 对剩下的人重复该过程,从下一个人开始,朝同一方…...
RAG生成中的多文档动态融合及去重加权策略探讨
目录 RAG生成中的多文档动态融合及去重加权策略探讨 一、RAG生成概述 二、多文档动态融合策略 1. 拼接与分段编码 2. 独立编码与后续融合 3. 基于查询的动态加权 三、检索结果的去重与加权策略 1. 去重策略 2. 加权策略 四、实践中的挑战与思考 五、结语 RAG生成中的…...
jdk21使用Vosk实现语音文字转换,免费的语音识别
1.下载vosk的model vosk官网:https://alphacephei.com/vosk/models 我这里使用较小的vosk-model-small-cn-0.22 2.添加相关pom文件 <!-- 获取音频信息 --><dependency><groupId>org</groupId><artifactId>jaudiotagger</artifac…...
I.MX6ULL 开发板上挂载NTFS格式 U 盘
I.MX6ULL 开发板上挂载NTFS格式 U 盘 挂载失败安装NTFS-3G安装失败成功安装 移植挂载成功卸载U盘 挂载失败 我使用的U盘的格式是NTFS格式的 插入U盘时会有信息 我使用的是闪迪的U盘,大小标称是 32G ,实际能用的只有 28G 左右 可以使用lsblk命令查看磁盘…...
性能测试~
1.什么是性能测试 1.什么是性能 就像这两个车一样,虽然都是代步工具,构造都是一样的,但是路虎的发动机要比捷达好.路虎的百米加速却是比捷达快的,我们就知道路虎的性能要比捷达好 . 那么什么是软件的性能呢?我们分析一下 2.常见的性能测试指标 2.1并发数 并发数是指在同一…...
排查使用RestTemplate远程调用,@RequestBody注解接收不到实体类
做项目学习,使用RestTemplate远程调用,从order订单系统调用pay支付系统,出现使用Request做远程接收。 代码的逻辑很简单,但就是没有接收到实体类 1. 猜想是不是没有序列化和初始化方法? 这个好排查,看Pay和…...
数据库同步中间件PanguSync:如何跳过初始数据直接进行增量同步
某些用户在使用数据库同步中间件PanguSync时说,我不想进行初次的全量同步,我已经源备份还原到目标库了,两边初始数据一样,想跳过初始数据,直接进行增量同步,该怎么设置。 直接上干货,按如下步骤…...
javaWeb Router
一、路由简介 1、什么是路由? - 定义:路由就是根据不同的 URL 地址展示不同的内容或页面。 - 通俗理解:路由就像是一个地图,我们要去不同的地方,需要通过不同的路线进行导航。 2、路由的作用 - 单页应用程序…...
qwen2.5vl技术报告解读
一. 首先qwen2.5vl模型特点 全能文档解析能力 升级文本识别至全场景文档解析,擅长处理多场景、多语种及复杂版式文档(含手写体、表格、图表、化学方程式、乐谱等),实现跨类型文档的精准解析。 跨格式精准目标定位 突破格式限制,大幅提升对象检测、坐标定位与数量统计精度,…...
【Linux】进程的详讲(上)
目录 📖1、冯诺依曼体系结构 📖2、硬件介绍 📖3、内存的重要性 📖4、程序运行的步骤 📖5、QQ聊天时的数据流动 📖6、操作系统 📖7、操作系统的目的 📖8、操作系统是如何…...
高精度除法
除数与被除数都是大整数 代码 #include<bits/stdc.h> using namespace std; typedef long long ll; string a,b; vector<int>dend,sor; bool aisbigger(vector<int>&a,vector<int>&b){if(a.size()!b.size())return a.size()>b.size();for…...
Android面试总结之Glide源码级理解
当你的图片列表在低端机上白屏3秒、高端机因内存浪费导致FPS腰斩时,根源往往藏在Glide的内存分配僵化、磁盘混存、网络加载无优先级三大致命缺陷中。 本文从阿里P8级缓存改造方案出发,结合Glide源码实现动态内存扩容、磁盘冷热分区、智能预加载等黑科技&…...
Pyside6 开发 使用Qt Designer
使用Qt Designer 在Scripts目录下打开pyside6-designer.exe 分别将姓名、年龄、爱好对应的输入框的ObjectName 设置为 uname、uage、ulike 提交按钮Object设置为 btnSubmit 点击保存文件 ,命名为student.ui 将.ui文件编程成.py文件 pyside6-uic student.ui -o st…...
PyQt6实例_批量下载pdf工具_使用pyinstaller与installForge打包成exe文件
目录 前置: 步骤: step one 准备好已开发完毕的项目代码 step two 安装pyinstaller step three 执行pyinstaller pdfdownload.py,获取初始.spec文件 step four 修改.spec文件,将data文件夹加入到打包程序中 step five 增加…...
