当前位置: 首页 > news >正文

【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案

【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案

一、V1和V2为什么需要混用

自从api7开始,一直到api10。V1的实际使用中,开发人员发现@Observed和@ObjectLink 监听实现多层级嵌套对象的更新的方案,太过于臃肿。当需要监听处理更新的多层级对象是七八层,就需要配套创建七八层的ObjectLink,代码太过于冗余。

V2就是为了解决该问题,华为官方才提出的新状态管理装饰器方案。该方案在解决该问题的基础上,也对V1的进行加强。

但是考虑现实开发情况。基本上鸿蒙现有的应用都在24年930节点之前上架了。大量使用的都是V1方案。如果要迁移到V2上。改动量太大,不亚于重新开发界面刷新相关业务。

所以官方V1和V2目前是相关独立,也可混用。这种状态估计会持续很长时间。

但是不用V2,前面提到的嵌套更新问题又需要好的方案解决。所以就需要V1和V2混用。

当然如果是新项目,还是建议直接使用V2.

二、V1和V2混用方案

原则上,只使用@ObservedV2与@Trace装饰器来解决深层嵌套对象更新UI的问题。暂时不使用其他的V2装饰器,其他的状态管理依旧使用V1即可。
在这里插入图片描述

以下代码示例参考,只使用@ObservedV2与@Trace装饰器,解决深层嵌套对象更新UI的问题:

import { util } from '@kit.ArkTS';/*** 三级数据结构*/
 
class GrandsonInfo { content: string = "";}/*** 二级数据结构*/
  
class ChildInfo { index: number; grandsonInfo: GrandsonInfo;constructor(index: number, content: string) {this.index = index;this.grandsonInfo = new GrandsonInfo();this.grandsonInfo.content = content;}
}/*** 一级数据结构*/
  
class ItemInfo {key: string = util.generateRandomUUID(true); name: string; icon: Resource; childInfo: ChildInfo; select: boolean;constructor(name: string, icon: Resource, index: number, content: string) {this.name = name;this.icon = icon;this.childInfo = new ChildInfo(index, content);this.select = false;}
}/*** 多层嵌套刷新渲染*/


struct ObservedPage {private TAG: string = "ObservedPage";// @State无法混用,运行时报错// @State mListData: Array<ItemInfo> = [];mListData: Array<ItemInfo> = [];aboutToAppear(): void {this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 1, "鹅厂1"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 2, "鹅厂2"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 3, "鹅厂3"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 4, "鹅厂4"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconA"), 5, "鹅厂5"));this.mListData.push(new ItemInfo('游戏', $r("app.media.iconB"), 6, "鹅厂6"));}build() {List() {ForEach(this.mListData, (item: ItemInfo, index: number) => {ListItem() {Row() {Image(this.item.icon).width(px2vp(200)).height(px2vp(200))Text(this.item.name + "(" + this.item.childInfo.index + ")" + " [ " + this.item.childInfo.grandsonInfo.content + " ] ").fontSize(px2fp(52))Blank()if(this.isLog(this.item, this.index)){if(this.item.select){Image($r("app.media.icon_check")).size({width: px2vp(72),height: px2vp(72)})}}}.width('100%').justifyContent(FlexAlign.Start).onClick(()=>{this.item.select = !this.item.select;if(this.item.select){// 使用很方便,只需要直接改变item数据的任意层级属性值,变化就会同步刷新this.item.childInfo.index = 666;this.item.childInfo.grandsonInfo.content = "鹅厂23333"}else{this.item.childInfo.index = this.index;this.item.childInfo.grandsonInfo.content = "鹅厂" + this.index;}console.log(this.TAG, " ItemView onClick: " + this.index + " item.select: " + this.item.select);})}}, (item: ItemInfo) => JSON.stringify(item)) }.width("100%").height("100%").padding({ left: px2vp(60), right: px2vp(60) })}
}

三、V1和V2混用注意点

  1. 使用@ObservedV2与@Trace装饰的类不能和@State等V1的装饰器混合使用,编译时报错。
  2. 继承自@ObservedV2的类无法和@State等V1的装饰器混用,运行时报错。
  3. @ObservedV2的类实例目前不支持使用JSON.stringify进行序列化。
  4. @ObservedV2、@Trace不能与@Observed、@Track混合使用。
  5. @Trace是class中属性的装饰器,不能用在struct中。
  6. @Trace不能用在没有被@ObservedV2装饰的class上。
  7. @ObservedV2仅能装饰class,无法装饰自定义组件。
  8. 非@Trace装饰的成员属性用在UI上无法触发UI刷新。

相关文章:

【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案

【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案 一、V1和V2为什么需要混用 自从api7开始&#xff0c;一直到api10。V1的实际使用中&#xff0c;开发人员发现Observed和ObjectLink 监听实现多层级嵌套对象的更新的方案&#xff0c;太过于臃肿。当需要监听处理更新的多层…...

【技海登峰】Kafka漫谈系列(三)详解Kafka的数据结构与存储机制

【技海登峰】Kafka漫谈系列(三)详解Kafka的数据结构与存储机制 Kafka 使用消息日志(Log)机制来持久化保存数据,我们知道Kafka实际是以Partition分区为单位进行负载均衡和资源分配,每个Partition又由多个Replica副本组成,副本之间分布于不同的Broker上来保证高可用,因此…...

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek&#xff0c;实现了AI编程&#xff0c;体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI&#xff08;CodeGPT&#xff09; 首先了解不同版本的deepsee…...

腾讯云扩容记录

腾讯云扩容&#xff1a; sudo yum install -y cloud-utils-growpart 安装扩容工具 sudo file -s /dev/vda1 有数据 sudo LC_ALLen_US.UTF-8 growpart /dev/vda 1 sudo resize2fs /dev/vda1 df -Th 完毕 以下是对执行的命令的详细解释以及背后的原理&#xff1a; 1. 安装 cloud…...

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

本地部署大语言模型-DeepSeek

DeepSeek 是国内顶尖 AI 团队「深度求索」开发的多模态大模型&#xff0c;具备数学推理、代码生成等深度能力&#xff0c;堪称"AI界的六边形战士"。 Hostease AMD 9950X/96G/3.84T NVMe/1G/5IP/RTX4090 GPU服务器提供多种计费模式。 DeepSeek-R1-32B配置 配置项 规…...

Windows逆向工程入门之MASM数据结构使用

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 第一章&#xff1a;MASM数据定义体系精要 1.1 基础数据类型全景 1.1.1 整型数据规范 1.1.2 浮点数据编码 1.2 复合数据结构 1.2.1 多维数组定义 1.2.2 复杂结构体 第二章&#xf…...

python 之协程笔记

协程 协程的本质是用户态线程&#xff0c;由程序自行控制切换时机&#xff0c;无需操作系统介入。与线程相比&#xff0c;协程的三大核心优势&#xff1a; 资源占用极低&#xff1a;一个协程仅需KB级内存&#xff0c;可轻松创建数万个切换效率惊人&#xff1a;上下文切换在用户…...

使用 REINFORCE 算法强化梯度策略

一、整体概述 此代码利用 REINFORCE 算法&#xff08;一种基于策略梯度的强化学习算法&#xff09;来解决 OpenAI Gym 中的 CartPole-v1 环境问题。CartPole-v1 环境的任务是控制一个小车&#xff0c;使连接在小车上的杆子保持平衡。代码通过构建一个神经网络作为策略网络&…...

【C++并发编程实战】第1章 你好,C++的并发世界!

文章目录 1. 何谓并发2. 为什么使用并发&#xff1f;3. 什么时候不使用并发4. C多线程历史5. 第一个并发程序 1. 何谓并发 最简单和最基本的并发,是指两个或更多独立的活动同时发生。计算机领域的并发指的是在单个系统里同时执行多个独立的任务&#xff0c;而非顺序的进行一些…...

【QT线程】子线程阻塞主线程的一次网络api请求案例

阻塞源码赏析 这是最近一次项目遇到的问题&#xff0c;原因是我觉得子线程里俩次请求间隔太短了&#xff0c;会引起服务器屏蔽我的api因此&#xff0c;我故作聪明加多了一个延时函数&#xff0c;欢迎各位鉴赏代码。 // 并行发起双请求 QNetworkRequest liveRequest(liveUrl);…...

DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順

DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ内でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ 中文版请访问这里…...

【计算机网络入门】初学计算机网络(五)

目录 1.编码&解码、调制&解调 2.常用编码方法 2.1 不归零编码&#xff08;NRZ&#xff09; 2.2 归零编码(RZ) 2.3 反向非归零编码(NRZI) 2.4 曼彻斯特编码 2.5 差分曼彻斯特编码 3. 各种编码的特点 4.调制 5.有线传输介质 5.1 双绞线 5.2 同轴电缆 5.3 光…...

unity学习60: 滑动条 和 滚动条 滚动区域

目录 1 滚动条 scrollbar 1.1 创建滚动条 1.2 scrollbar的子物体 1.3 scrollbar的属性 2 滚动视图 scroll View 2.1 创建1个scroll View 2.1.1 实际类比&#xff0c;网页就是一个 scroll view吧 2.2 子物体构成 2.3 核心component : Scroll Rect 3 可视区域 view p…...

【Linux网络-HTTP协议】HTTP基础概念+构建HTTP

代码定位&#xff1a;南毅c/Linux - Gitee.com HTTP协议 介绍 虽然我们说&#xff0c;应用层协议是我们程序猿自己定的.但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c…...

2025年企业网络安全实战指南:常见漏洞解析与全方位防御策略

2025年企业网络安全实战指南:常见漏洞解析与全方位防御策略 作者: 网络安全专家 日期: 2025-02-27 分类: [网络安全] 标签: [漏洞防护, 信息安全, 企业安全] 引言:漏洞是攻击者的入口,防御是安全的基石 2025年,网络安全威胁持续升级。根据Gartner最新报告,全球企业因漏洞…...

一个py文件搞定mysql查询+Json转换+表数据提取+根据数据条件生成excel文件+打包运行一条龙

import os import argparse import pymssql import json import pandas as pd from datetime import datetime from pandas.io.formats.excel import ExcelFormatter import openpyxl# 投注类型映射字典 BET_MAPPING {1: WIN, 2: PLA, 3: QIN, 4: QPL,5: DBL, 6: TCE, 7: QTT,…...

P1123 取数游戏

题目描述 一个 NM 的由非负整数构成的数字矩阵&#xff0c;你需要在其中取出若干个数字&#xff0c;使得取出的任意两个数字不相邻&#xff08;若一个数字在另外一个数字相邻 8 个格子中的一个即认为这两个数字相邻&#xff09;&#xff0c;求取出数字和最大是多少。 输入格式…...

Spock框架:让单元测试更优雅的高效武器

&#x1f4d6; 前言&#xff1a;为什么选择Spock&#xff1f; 在软件开发领域&#xff0c;单元测试是保证代码质量的基石。但传统的JUnit/TestNG测试框架在面对复杂测试场景时&#xff0c;往往会显得力不从心。Spock框架作为新一代测试框架的佼佼者&#xff0c;以其独特的BDD&…...

STM32中的ADC

目录 一&#xff1a;什么是ADC 二&#xff1a;ADC的用途 三&#xff1a;STM32F103ZET6的ADC 3.1ADC对应的引脚 3.2ADC时钟 3.3ADC的工作模式 ​编辑3.4ADC校准 3.5ADC转换结构和实际电压的换算 四&#xff1a;ADC配置步骤 五&#xff1a;两个重要的函数 一&#xff1a…...

React Portals深度解析:突破组件层级的渲染艺术

React Portals的核心概念、使用场景、实现方法、优缺点以及最佳实践。根据我搜索到的资料,都详细讨论了Portals的使用方法、应用场景和注意事项。比如提供了代码示例,说明如何用createPortal将组件渲染到DOM的其他位置,而则强调了Portals在解决z-index和overflow问题上的优势…...

AWS SQS跨账户访问失败排查指南

引言 在使用AWS SQS(Simple Queue Service)时,跨账户访问是常见的业务场景。例如,账户A的应用程序向队列发送消息,账户B的消费者从队列拉取消息。尽管AWS官方文档明确支持此类配置,但在实际应用中,由于权限模型的复杂性,开发者和运维人员常会遇到“策略已配置但无法接…...

数据挖掘工程师的技术图谱和学习路径

数据挖掘工程师的技术图谱和学习路径: 1.基础知识 数据挖掘工程师是负责从大量数据中发现潜在模式、趋势和规律的专业人士。以下是数据挖掘工程师需要掌握的基础知识: 数据库知识:熟悉关系数据库和非关系数据库的基本概念和操作,掌握SQL语言。 统计学基础:了解统计学的基…...

0301 leetcode - 1502.判断是否能形成等差数列、 682.棒球比赛、657.机器人能否返回原点

1502.判断是否能形成等差数列 题目 给你一个数字数组 arr 。 如果一个数列中&#xff0c;任意相邻两项的差总等于同一个常数&#xff0c;那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false…...

【03】STM32F407 HAL 库框架设计学习

【03】STM32F407 HAL 库框架设计学习 摘要 本文旨在为初学者提供一个关于STM32F407微控制器HAL&#xff08;Hardware Abstraction Layer&#xff09;库框架设计的详细学习教程。通过本文&#xff0c;读者将从零开始&#xff0c;逐步掌握STM32F407的基本知识、HAL库的配置步骤…...

React低代码项目:Redux 状态管理

吐司问卷&#xff1a;Redux 状态管理 Date: February 18, 2025 5:37 PM (GMT8) Redux 管理用户信息 命名规范&#xff1a; 以 Info 结尾表示获取Reudx信息&#xff0c;比如 useGetUserInfo.ts 以 data 结尾表示获取服务端信息&#xff0c;比如 useLoadQuestionData 采用 Re…...

Vue核心知识:动态路由实现完整方案

在Vue中实现动态路由&#xff0c;并结合后端接口和数据库表设计&#xff0c;是一个复杂的项目&#xff0c;需要多个技术栈和步骤的配合。以下将详细描述整个实现过程&#xff0c;包括数据库设计、后端接口设计、前端路由配置以及如何实现动态路由的功能。 目录 一、需求分析二…...

Linux安装jdk,node,mysql,redis

准备工作&#xff1a; 1.安装VMware软件&#xff0c;下载CentOs7镜像文件&#xff0c;在VMware安装CentOs7 2.宿主机安装Xshell用来操作linux 3. .宿主机安装Xftp用来在宿主机和虚拟机的linux传输文件 案例1&#xff1a;在 /home/soft文件夹解压缩jdk17&#xff0c;并配置环…...

数据库原理与使用基础教程

数据库原理与使用基础教程 大纲 数据库基础概述 什么是数据库&#xff1f;数据库管理系统&#xff08;DBMS&#xff09;概述数据库的类型数据库模型与结构 关系型数据库 关系型数据库简介表&#xff08;Table&#xff09;、字段&#xff08;Field&#xff09;、记录&#xff…...

GCC 与 Clang:两大编译器的全面对比与深度解析!

GCC 与 Clang&#xff1a;两大编译器的全面对比与深度解析&#xff01;&#x1f525; 你是否曾为选择编译器而纠结&#xff1f;GCC 和 Clang 作为 C/C 开发中最主流的编译器&#xff0c;它们各自有什么优势和特点&#xff1f;为什么有人说 Clang 更现代&#xff0c;而 GCC 更强…...

ue5 创建多列StreeView的方法与理解

创建StreeView的多列样式怎么就像是创建单行单列差不多?貌似就是在单行单列中加入了多列widget? 示例代码 DetailTabWidget #pragma once #include "TreeViewItemBase.h"class SDetailTabWidget : public SCompoundWidget {SLATE_BEGIN_ARGS(SDetailTabWidget){…...

GPT-4.5来了

https://chat.xutongbao.top/...

java后端开发day25--阶段项目(二)

&#xff08;以下内容全部来自上述课程&#xff09; 1.美化界面 private void initImage() {//路径分两种&#xff1a;//1.绝对路径&#xff1a;从盘符开始写的路径 D:\\aaa\\bbb\\ccc.jpg//2.相对路径&#xff1a;从当前项目开始写的路径 aaa\\bbb\\ccc.jpg//添加图片的时…...

【小羊肖恩】小羊杯 Round 2 C+K

题目链接&#xff1a;https://ac.nowcoder.com/acm/contest/100672#question C.是毛毛虫吗&#xff1f; 思路&#xff1a; 其实很简单&#xff0c;假设我们要满足题目所给条件&#xff0c;那么这个毛毛虫最坏情况下肯定是一条如下图所示的无向图 右端省略号为对称图形 &…...

计算机网络——详解TCP三握四挥

文章目录 前言一、三次握手1.1 三次握手流程1.2 tcp为什么需要三次握手建立连接&#xff1f; 二、四次挥手2.1 四次挥手流程2.2 为什么是四次&#xff0c;不是三次&#xff1f;2.3 为什么要等待2msl&#xff1f;2.4 TCP的保活计时器 前言 TCP和UDP是计算机网络结构中运输层的两…...

PHP实现国密SM4算法,银行系统加密算法,JAVA和PHP可相互转换(附完整源码)

最终实现效果&#xff1a;PHP生成加密串&#xff0c;JAVA代码中完成匹配 JAVA SM4库实现效果 /*** 签名** param content 请求报文体* param secret 密钥* return*/public static String sign(String content, String secret) {String charSet "UTF-8";String c…...

DILLEMA:扩散模型+大语言模型,多模态数据增强框架

引言&#xff1a;深度学习模型的鲁棒性测试需要全面且多样化的测试数据。现有的方法通常基于简单的数据增强技术或生成对抗网络&#xff0c;但这些方法在生成真实且多样化的测试数据集方面存在局限性。为了克服这些限制&#xff0c;DILLEMA框架应运而生&#xff0c;旨在通过结合…...

京东web 详情 cfe滑块分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 data response.json() pri…...

【Redis学习】Redis Docker安装,自定义config文件(包括RDB\AOF setup)以及与Spring Boot项目集成

【本文内容】 第1章&#xff1a;通过Docker安装Redis&#xff0c;并自定义config文件以及mount data目录。第2章&#xff1a;介绍Redis持久化到磁盘&#xff0c;有4种方式&#xff1a;RDB / AOF / NONE / RDB AOF。第3章&#xff1a;使用Server自带的redis-cli工具连接。第4章…...

Python 面向对象编程-继承与多态

目录 继承与多态 静态语言 vs 动态语言 小结 继承与多态 在OOP程序设计中&#xff0c;当我们定义一个class的时候&#xff0c;可以从某个现有的class继承&#xff0c;新的class称为子类&#xff08;Subclass&#xff09;&#xff0c;而被继承的class称为基类、父类或超类&a…...

AcWing 蓝桥杯集训·每日一题2025·5439. 农夫约翰真的种地

5439. 农夫约翰真的种地 题目描述 农夫约翰在他的农场种植了 N N N 个芦笋&#xff0c;编号 ( 1 ∼ N ) (1 \sim N) (1∼N)。 其中&#xff0c;第 i i i 个芦笋的初始高度为 h i h_i hi​&#xff0c;每经过一天高度会增长 a i a_i ai​。 给定一个 ( 0 ∼ N − 1 ) (0…...

如何将 Excel 数据转换为 SQL 脚本:从入门到实战

全文目录&#xff1a; 开篇语? 前言?? 目录?? 什么是 SQL 脚本&#xff1f;?? 为什么要将 Excel 转换为 SQL 脚本&#xff1f;??? 如何将 Excel 转换为 SQL 脚本 ?? 方法一&#xff1a;使用在线转换工具?? 方法二&#xff1a;通过 Excel VBA 编写脚本?? 方法三…...

0x05 部门功能开发日志技术

准备工作 开发规范 采用restful风格&#xff1a;representational state transfer&#xff0c;表述性状态转换&#xff0c;是一种软件架构风格 REST是风格&#xff0c;是约定方式&#xff0c;约定不是规定&#xff0c;可以打破 描述功能模块通常使用复数形式加s&#xff08;如…...

塔能物联运维:城市照明极端天气下的“定海神针”

在当今城市快速发展的进程中&#xff0c;城市照明系统的稳定性和可靠性在极端天气条件下愈发受到关注。而塔能物联运维平台的出现&#xff0c;为城市照明在各种复杂环境下的稳定运行提供了强有力的保障&#xff0c;让城市照明在极端天气下也能“稳如泰山”。 城市照明对于保障市…...

Transformer 代码剖析7 - 词元嵌入(TokenEmbedding) (pytorch实现)

一、类定义与继承关系剖析 1.1 代码结构图示 #mermaid-svg-9COHbtmHJhpiroHM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9COHbtmHJhpiroHM .error-icon{fill:#552222;}#mermaid-svg-9COHbtmHJhpiroHM .error-t…...

6.6.5 SQL访问控制

文章目录 GRANT授予权限REVOKE回收权限 GRANT授予权限 GRANT语句可以给用户授予权限&#xff0c;基本格式是GRANT 权限 TO 用户。在授权时&#xff0c;WITH GRANT OPTION是可选项&#xff0c;有此句话&#xff0c;被授予权限的用户还能把权限赋给其他用户。 REVOKE回收权限 RE…...

IDEA 使用codeGPT+deepseek

一、环境准备 1、IDEA 版本要求 安装之前确保 IDEA 处于 2023.x 及以上的较新版本。 2、Python 环境 安装 Python 3.8 或更高版本 为了确保 DeepSeek 助手能够顺利运行&#xff0c;您需要在操作系统中预先配置 Python 环境。具体来说&#xff0c;您需要安装 Python 3.8 或更高…...

React + TypeScript 实现 SQL 脚本生成全栈实践

React TypeScript 实现数据模型驱动 SQL 脚本生成全栈实践 引言&#xff1a;数据模型与 SQL 的桥梁革命 在现代化全栈开发中&#xff0c;数据模型与数据库的精准映射已成为提升开发效率的关键。传统手动编写 SQL 脚本的方式存在模式漂移风险高&#xff08;Schema Drift&#…...

用DeepSeek生成批量删除处理 PDF第一页工具

安装依赖库 在运行程序之前&#xff0c;请确保安装所需的库&#xff1a; pip install pymupdf python-docx Python 程序代码 import os import fitz # PyMuPDF from docx import Documentdef delete_pdf_first_page(input_path, output_path):"""删除 PDF…...

三个小时学完vue3(一)

Vue3 之前就学过一些&#xff0c;不过用的比较少&#xff0c;基本忘完了/(ㄒoㄒ)/~~ 跟着B站视频迅速回忆一下 创建一个Vue 3 应用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&…...