通了顺畅了
PHP 如何无限极数组映射成文件夹?
再生产项目中碰到一个配置文件转换问题,读取配置文件,并自动生成出目录:云存储使用的。
$config = [
'uuid'=>'string',
'info'=>'string',
'main'=>[
'uuid'=>'string',
'cmd'=>'string',
'child'=>[
'uuid'=>'string',
'remark'=>'string',
'game'=>[
'user'=>'name',
'money'=>'1000'
]
],
'logs'=>[
'path'=>'/path/path',
'date'=>'2023-09-01'
]
],
'video'=>[
'uuid'=>'vid',
'info'=>'info',
'file'=>[
'size'=>'12900'
]
]
];
以上是配置文件的一部分:现在需要根据配置生成目录,"只考虑键值为数组的情况"键值字符串是文件的属性。
$list = [
'main',
'main/child',
'main/child/game',
'main/logs',
'video',
'video/file',
...
];
我考虑"扁平化","new RecursiveIteratorIterator(new RecursiveArrayIterator($sqlite));"
"foreach 递归" 都没弄成功。请求高手给解!
通了顺畅了
有什么软件或者方式 能够实现 在 PDF 中 添加图片 作为注释吗?
有什么软件或者方式 能够实现 在 PDF 中 添加图片 作为注释吗?
注释内容是图片+文字
通了顺畅了
为什么这样调用图片加载,promise 内部的后续代码不会执行了?
"onload is not function?" 报错了吧。
正确的应该是
img.onload = (()=>resolve(img))
img.onerror = (()=>reject())
通了顺畅了
怎么知道项目支持浏览器的版本?
例如我现在写的这个是ice2.0+antd4.0
怎么知道兼容的浏览器以及版本呢
"企业微信截图_1693877855391.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250110/33697e178fef8efe71bc5ead89537bbe.png)
"企业微信截图_16938778856242.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250110/e87f0a8d8f8bbd2e70ce4284f0368ee6.png)
不知道兼容对应具体的版本号是多少-多少
通了顺畅了
在表格组件中单元格的宽高怎么根据内容自动计算?
可以使用开源图表组件VTable来实现这个效果,VTable可以配置宽度高度的自动计算模式。
代码参考:
const records = [
{
"230517143221027": "CA-2018-156720",
"230517143221030": "JM-15580",
"230517143221032": "Bagged Rubber Bands",
},
{
"230517143221027": "CA-2018-115427",
"230517143221030": "EB-13975",
"230517143221032": "GBC Binding covers",
},
{
"230517143221027": "CA-2018-115427",
"230517143221030": "EB-13975",
"230517143221032": "Cardinal Slant-D Ring Binder,\n Heavy Gauge Vinyl",
},
{
"230517143221027": "CA-2018-143259",
"230517143221030": "PO-18865",
"230517143221032": "Bush Westfield Collection Bookcases, Fully Assembled",
},
{
"230517143221027": "CA-2018-126221",
"230517143221030": "CC-12430",
"230517143221032":
"Eureka The Boss\n Plus 12-Amp Hard Box Upright Vacuum, Red"
}
];
const columns = [
{
field: "230517143221027",
caption: "Order ID"
},
{
field: "230517143221030",
caption: "Customer ID"
},
{
field: "230517143221032",
caption: "Product Name",
style: {
fontSize(args: any) {
if (args.row % 2 === 1) return 20;
return 12;
}
}
}
];
const option = {
records,
columns,
limitMaxAutoWidth: 800,
widthMode: "autoWidth",
heightMode: "autoHeight"
};
// 创建 VTable 实例
const vtableInstance = new VTable.ListTable(
document.getElementById("container")!,
option
);
结果展示:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250108/eff87fa58eabc67a52664e5f1bcd678d.png)
在线效果参考:"https://codesandbox.io/s/vtable-widthmode-heightmode-56m24x" (https://link.segmentfault.com/?enc=rq3TCwWSHOxjEyA3yEMviw%3D%3D.2Q0vX9wFGKnjlE0hLd4yeNvTdMBfm1CYHpqYTnyAHCQX8Jt7qItJAxCJM8wSQpHXb%2BfCgffuxveJUHdcIwuYtA%3D%3D)
相关文档:
基本表格demo:"https://visactor.io/vtable/demo/table-type/list-table" (https://link.segmentfault.com/?enc=xWTkDx3q9ZkAeWKdwCafXw%3D%3D.hqE%2F8NKFv2I208iU4wagZ45lH9Y3kPw5fPOOjp6T6tDIMlbB4Hfd%2BS317T6PAWiIXG1CL6MMLWnYK%2BI9SxCu0A%3D%3D)
行高列宽教程:"https://visactor.io/vtable/guide/basic_function/row_height_co..." (https://link.segmentfault.com/?enc=L6qNHZpyEEQS5WxN8F76cQ%3D%3D.asusyoV8is%2FqJOn%2BE7IdsMDDAQAFuKYjz%2F1ukDM%2B6Z%2BxJlD%2B75N1Z81bgLe8GbOHYx0H5SENV%2BxgvoO7Ba3FwwQxG9z09m2pb2WmkC22tQA%3D)
相关api:"https://visactor.io/vtable/option/ListTable#widthMode" (https://link.segmentfault.com/?enc=VC4IYsi26kvFafa6FuZz5g%3D%3D.EbDumz0lQXR9CoUVrmI53GSLfG%2FxLYL7yuzUCMIrxmFVmUZM6Z8i67AuYRLf%2FT3qiTtpxJHoofC9S0KWnNj7OA%3D%3D)('standard'%20%7C%20'adaptive'%20%7C%20'autoWidth')%20=%20'standard'
github:"https://github.com/VisActor/VTable" (https://link.segmentfault.com/?enc=W85MHPf%2FSPEpX6rR%2FcXGYQ%3D%3D.S9Msxn7qiyNiycaPS7I1g0VSLU3mHvLmLFA2U80u8N13DtEBXh0MuyYU9w0CcR5B)
通了顺畅了
请问定义方法在组件内和定义在组件外有什么区别呢?还是都可以?
写在组件内部主要是为了便于通过作用域链访问组件内定义的变量和方法 :
function TestComponent(){
const [pages, setPages] = useState([]);
useEffect(() => {
fetch("path/to/pages").then(async (res) => {
const { info } = await res.json();
// 这里访问了组件内定义的方法 setPages
setPages(info);
});
},[]);
return xxxx
}
上述方法如果要搬到组件外,可以这样写:
const genarateEffectCallback = setPages => () => {
fetch("path/to/pages").then(async (res) => {
const { info } = await res.json();
// 这里的 setPages 由外界传入
setPages(info);
});
}
function TestComponent(){
const [pages, setPages] = useState([]);
useEffect(genarateEffectCallback(setPages), []);
return xxxx
}
通了顺畅了
mysql 如何迁移数据流较大的数据库?
数据库日积月累几个G后,从服务器A导入到服务器B
导入数据库总是失败。内存不足或者直接崩了。
请问有什么方案可以稳定的分段导入吗?
通了顺畅了
vue 检查登录的接口,在页面登录跳转后会再次请求 造成了死循环?
我有一个检查登录接口"checked/login"
要求必须放在App.vue页面
在"mounted"方法中我请求了检查登录接口,
在打开登录页面"/web/login"时会调用一次,正常登录后 后台返回的字段data
let data = {
errcode: 0,
is_login: true,
isAdmin: false,
msg: "获取成功",
info: {status: 4}
}
根据 "data.info.status === 4" 判断跳转到"/web/index"页面,
但是在"/web/index"页面也会请求一次"checked/login"接口,然后会再次根据 "data.info.status === 4"
判断跳转到"/web/index"页面,这样就陷入了一个一直刷新的局面,该怎么解决???
通了顺畅了
数据全0时,如何配置x轴的位置?
试一下y轴最小值给0
通了顺畅了
ci/cd求解释?关于不同项目镜像体积问题??
go项目的镜像514M也不小哇!
一般go的项目,一个二进制文件+加一个基础系统镜像,应该不会超过200M,(这还是打包出来的可执行文件比较大的情况下)
***
你应该是把代码和构建时需要的依赖也都放在镜像里面了,你可以看看 多阶段构建 ,最终的镜像只保留构建后的东西。
你可以贴一下dockerfile,看下有没有优化的点。
通了顺畅了
萌新提问关于 react 的路由问题?
项目是 Umi 创建的,用的路由插件是 "react-router-dom"。
有两个页面,第一个页面通过 "Link" 组件跳转到第二个页面,第二页页面是 "router" 文件夹里的 "router-page",第一个页面的代码如下:
import { Link } from 'umi';
export default function HomePage() {
return (
路由
);
}
".umirc" 里也的路由也添加好了:
{ path: '/router/router-page', component: 'router/router-page' },
可以成功的从第一页跳转到第二页。
然后第二页 "router-page.tsx" 里的代码如下:
import { Component } from 'react';
import { NavLink, Route, Routes } from 'react-router-dom';
export default class RouterPage extends Component {
render() {
return (
首页
关于
);
}
}
function RouterView() {
return (
}>
}>
);
}
function Home() {
return (
首页内容
);
}
function About() {
return (
关于页面内容
);
}
页面显示如下:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241229/b6e02ec4f7f59e8d667d225c72f89d7c.png)
现在的问题是,我点击“关于”按钮,页面直接变白板了,然后控制台提示:
«You rendered descendant (or called "useRoutes()") at
"/router/router-page" (under ) but the
parent route path has no trailing "*". This means if you navigate deeper,
the parent won't match anymore and therefore the child routes will never
render.Please change the parent to .No routes matched location "/about"»
根据它的提示,我去把 "Link" 改了下:
路由
结果第二个页面全都变白板了。
我是 react 新手,想请教下大家这个问题应该如何解决?
通了顺畅了
我做了个纯html页面的网站,怎么让客户在本地浏览?
客户不会安装apache
nginx这些,又不想用我的服务器,他要本地浏览,断网离线也能运行html文件。有什么软件能内置个http服务器,直接运行html吗?
通了顺畅了
请教一个html打印问题,困扰了好久?
其实就是在合适的元素增加 "page-break" 这个断页CSS属性。比如说你这个情况 👇,也就是因为你给 ".item" 元素断页了所以导致的。
"图片.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241216/39229cb8c0554b5e8f7b528511e79fea.png)
可以给 "" 元素添加,这样的话,就会使整行 "tr"
被移动下一页了。就不会出现OP你提到的这个整个被断页的问题了,也不会出现一半的文字在第一页,一半的文字在第二页这样的情况。
另外需要检查打印设置中的页边距 配置。这个配置没办法有效通过API来控制(浏览器兼容问题),所以最好在打印时手动确认一下。
可以参考一下我之前写过的一篇笔记 👉 "HTML API + CSS
控制页面打印内容和样式" (https://segmentfault.com/a/1190000043437902)
通了顺畅了
Keil uVision5软件在使用时出现这种情况怎么办?
需要连接对应的开发板
在软件中找到"options for target",依次点击"Debug", "Settings"
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241211/7f1a421f1f3175250a1893332149af90.png)
如果开发板成功连接,软件会自动检测到,并在图中右上角SW Device栏显示(我这里没有连接所以显示No Debug Unit Device Found)
此时点击load下载代码,然后代码就会开始在开发板上运行
现在你就可以使用Debug中的一系列功能了
通了顺畅了
大家是如何解决在vscode上使用volar 保存代码,代码末尾自动加分号的呢?
使用prettier是可以比较好的解决保存代码,代码末尾自动加分号的;但使用volar后对应的保存代码自动格式化就失效了,大家有好的解决方案吗?
通了顺畅了
使用element的DatePicker选择器时,可以进行限制吗?
我使用的是
,但是我进行限制,比如只能选择两个或几个日期,而不是无限制选择,怎么修改?
通了顺畅了
typeorm关联查询某个数据项的total应该怎么写?
async findOneWithTelCount(userId: number): Promise {
const rawData = await this.userRepository
.createQueryBuilder('user')
.leftJoin('user.tel', 'tel')
.select([
'user.id AS id',
'user.userName AS userName',
'COUNT(DISTINCT tel.id) AS totalTel'
])
.where('user.id = :userId', { userId }) // 如果你有过滤条件,比如获取特定的 user
.groupBy('user.id')
.getRawOne();
if (!rawData) return null;
return {
id: rawData.id,
userName: rawData.userName,
totalTel: +rawData.totalTel
};
}
通了顺畅了
Spring中整合ssm的时候导入的spring-jdbc坐标是干嘛的?
最近学习spring整合ssm,看到在pom.xml导入很多坐标
org.springframework
spring-context
5.2.10.RELEASE
com.alibaba
druid
1.1.16
org.mybatis
mybatis
3.5.6
mysql
mysql-connector-java
8.0.12
org.springframework
spring-jdbc
5.2.10.RELEASE
org.mybatis
mybatis-spring
1.3.0
我不太理解为什么需要这么多的坐标,尤其是spring-jdbc这个,我的理解的我已经导入druid数据源了也导入了mybatis相关坐标了,按理说这2个坐标就是为了解决jdbc建立连接和销毁太过于浪费资源/
MyBatis是对JDBC的封装,即使CRUD操作变得更加简单了。那为什么还需要jdbc的坐标呢?有没有懂的老哥帮忙解答一下,谢谢了!!
通了顺畅了
网页打印预览的时候很正常,打印出来上边跟左边内容不全怎么办?
设置了
@media print {
body{
margin: 0;
padding: 0;
}
@page{
padding: 0;
margin: 0;
}
body{
scale: 1;
}
}
预览时如下:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241205/01366bb08a79b22a57be67e711b06805.png)
实际打印出来如下,且内容会缩放:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241205/c252f31cc1953e47195b32df1daf3c78.png)
通了顺畅了
webpack与less-loader版本不兼容?
"https://www.webpackjs.com/loaders/less-loader/" (https://link.segmentfault.com/?enc=ed6ry7Y8ekKFR537f3L%2BpA%3D%3D.fnFdcVMWAD5fiJRQFDmYpBOAH6i4giboAxYGpYnX9DQKNR7vOLTxwAysjhYw58VT)
webpack.config.js中没有配置less格式的,加上就行了
module.exports = {
module: {
rules: [
{
test: /\.less$/i,
use: [
// compiles Less to CSS
'style-loader',
'css-loader',
'less-loader',
],
},
],
},
};
通了顺畅了
Redisson锁续期失败怎么通知主线程?
Redisson的看门狗实现中,对于续期失败的异常处理就是释放锁:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241201/a81ddf4ba05f88cc5b7d751556b14536.png)
«见红框»
也就是说主线程不会知道当前锁是否还有效,可能锁因为续期失败已经过期了,但主线程还在处理业务。
这种情况应该怎么处理呢?
通了顺畅了
antv x6节点高度不定,如何自动布局?
使用antv
x6绘制组织架构图,参照的"官网用例" (https://link.segmentfault.com/?enc=YdhS1Q0Wc0JIWfBUo6PVag%3D%3D.cjl7SweaxxE3LBnQewTcJgEe0o9ybZNsEeloLdQDGmshaJtQBeWXvM%2FYFif0rf379ks2Pt%2Bfefy02v1Cgpgb3sO5xsiueVxdAHMRM5%2BisuQ%3D)
但是自定义节点大小不一,导致节点连线是斜的,如何解决这个问题?其中的自动布局方法和官网用例是一模一样的。
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241128/715a054bf6b7177951bfc2a0ab468f1d.png)
通了顺畅了
有没有什么高性能图表库或方案?
能支持20ms渲染完上万个点的
echarts测试:
"echarts
codesandbox测试" (https://link.segmentfault.com/?enc=IYlFl7hxp5QLRUDz1987gA%3D%3D.LsetOTVB8idHmdacCpSJ8JeFBRPNEin8AndaDaWNi%2FV1Cmw0rb2gz319Bj6ga08EoQ7EchuHjv4kX5y9%2FJ4eZMoHzdg8G9YjhQs3ADgdgEY%3D)
通了顺畅了
springboot中拦截器、过滤器、监听器各自使用场景?
拦截器(HandlerInterceptor):
拦截器是 SpringMVC
中的一个核心接口,用于在处理请求之前或之后执行一些操作。它可以在方法执行前后分别拦截请求,可以实现对请求的预处理和后处理。拦截器的主要作用是对请求进行过滤和权限验证等。
适用场景:拦截器主要用于处理与请求相关的预处理和后处理逻辑,例如登录验证、权限检查等。
过滤器(Filter):
过滤器是 Java
中的一个接口,用于在请求处理之前或之后执行一些操作。过滤器可以对请求进行预处理和后处理,同时具有跨站请求拦截的能力。过滤器的主要作用是对请求进行过滤和处理。
适用场景:过滤器主要用于处理与请求无关的通用逻辑,例如日志记录、跨站请求过滤等。
监听器(Listener):
监听器是 Spring 中的一个接口,用于在特定事件发生时执行一些操作。监听器可以监听 Spring 容器中的各种事件,如配置加载、Bean
创建等。监听器的主要作用是监听 Spring 容器中的事件,并进行相应的处理。
适用场景:监听器主要用于处理 Spring 容器中的事件,例如配置加载、Bean 初始化等。
在 SpringBoot
项目中,根据具体需求选择合适的拦截器、过滤器或监听器来实现请求拦截。如果需要处理与请求相关的预处理和后处理逻辑,优先考虑使用拦截器;如果需要处理与请求无关的通用逻辑,可以使用过滤器;如果需要监听
Spring 容器中的事件,可以使用监听器。注意"过滤器和拦截器在某些场景下可以相互替代",具体选择取决于项目需求和编码习惯。
通了顺畅了
一个Java应用问题?
首先名字本身就有空格怎么办
通了顺畅了
别笑菜:固定格式的针式票据或文件打印具体是怎么实现的?
主要看打印机的协议,我之前做过一款打印快递单子的打印机的网页端,这款打印机有自定义的协议,按照协议描述,把内容拼接到指定的 XML 字符串模板里面,通过
webSocket 发送给打印机,打印机自己会完成排版。
所以如果明确了需要适配的打印机机型的话,你可以问打印机厂商或者商家找找有没有打印机的开发文档,有文档并且明确怎么打的话再好不过了。
没有的话那恐怕只能提供大致位置的初始值了,最多也就是提供一个调参界面,让用户自己去调整。
通了顺畅了
如何实现表格内图片预览?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241117/6523eeaf9a73c68001edc334f3ea069c.png)
如图:表格内显示出图片链接,鼠标悬停链接弹出图片,现在希望点击图片能够实现一些预览操作:放大、缩小。
UI
{{
scope.row[item.prop]
}}
{{
scope.row[item.prop]
}}
import 'viewerjs/dist/viewer.css'
import VueViewer from 'v-viewer'
import Vue from 'vue'
Vue.use(VueViewer)
zoomPic(url){
this.$viewerApi({
images: url,
})
}
点击图片后,报错:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241117/901ead98fa847667a1224981dfdd42db.png)
通了顺畅了
docker命令安装redis,报错?
宿主机的目录data_redis,这个命名不符合规则,改一下吧,only "a-zA-Z0-9"
通了顺畅了
Vue为何打包后的样式不一致?
和 CSS 作用域有关系,可以看到你 "slot" 进来的 ".header" 元素,同时拥有了当前层级和"layout" 的 "scope"
属性。自然可以应用到两个组件各自的CSS样式。
"图片.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241112/51279a92496a303e8d79bc33ec810a75.png)
如果需要避免这个问题,BEM的命名方式还是需要的。其实很多开发者在最后并不会默认开启组件样式的 "scope" 属性。
通了顺畅了
有没有比较熟悉Vue3的, 麻烦帮忙看下这个需求怎么实现?
"vue" 中应该没有现成的方案直接绑定第一个子元素,但是有个思路:
1. 用 "watch" 或 "watchEffect" 监听 "$slots.default" 的变化
2. 在变化后将 "$slots.default" 中的第一个元素赋值到 "childRef.value" 中;
通了顺畅了
setup语法糖不支持 render函数?
你可能需要使用jsx,先安装依赖vitejs/plugin-vue-jsx,然后在vite.config文件中添加
// jsx使用配置
esbuild: {
jsxFactory: 'h',
jsxFragment: "Fragment",
jsxInject: "import { h } from 'vue';"
}
使用时先引用 import { h } from 'vue'
return () => h(
'i',
{
class: ["iconfont", "y-icon", props.icon]
});
通了顺畅了
created中调用数据源获取方法,在mounted中调用操作数据源的方法,这样mounted中存放的方法会获取不到初始值?
在created钩子函数调用获取数据源的方法getData(),在getData()中再调用updateData()方法来更新某些数据源数据,并且再mounted()函数中调用了upDataData()函数。控制台报错在mounted钩子函数中获取不到在updateData()中操作数据源的属性:
"image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241031/130849b5e6de2c710d1383603c36e307.png)
async getData() {
const data = await getChartOne();
this.allData=data
console.log('耗时情况',data);
this.updateChart()
},
updateChart() {
const text=this.allData.title
const data=JSON.parse(JSON.stringify(this.allData))
// console.log(data,11111);
const fault=data.data[0]
console.log(fault,111111);
}
打印出来都有数据,但是控制台照样报错,这是什么原因?
把updateData()函数从mounted钩子中删掉,报错解决。
通了顺畅了
在原型上实现 filter 方法?
把接收的形参补充上去就可以了,图上的测试用例试了没问题的
"image.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241030/0118768b87c2cd554084e42e58d11b2d.png)
Array.prototype.myFilter = function (callbak) {
const newArr = [];
this.forEach((e, index, array) => {
if (callbak(e, index, array)) {
newArr.push(e);
}
});
return newArr;
};
通了顺畅了
ESLint错误代码未提示?
在项目中安装eslint依赖没,如果安装了需要在根目录下.eslintrc.js文件中配置下rule,rule: {"no-undef": 2,...}
通了顺畅了
如何动态计算时间所处的范围?
"https://jsrun.net/3qHKp" (https://link.segmentfault.com/?enc=ppEmmFQNK5wfBoVQpKDuMQ%3D%3D.iQwXGB%2Fkaoo7ANLP8d2DQigsdy6%2FmhcB66mcZ5OLuxU%3D)
写了段比较时间的代码 用的moment 你可以看看
通了顺畅了
想要微信迁移用户到新的微信账户下,请问是否有方便的工具执行呢?
想要微信迁移用户到新的微信账户下,请问是否有方便的工具执行呢?
通了顺畅了
为什么不是Vue.ts?
强行解答一下,我的理解是因为即使是用TS重构了,其实也是一个Javascript框架。TS只是JS的基础上增加了扩展和增强,但是这些扩展在ES6+之后也逐渐被实现,增强的优势也没有那么明显了。主要还是提供更好的类型检查和提示等这些“开发”体验。
并且最后编译结果也其实还是
"vue.global.js" (https://link.segmentfault.com/?enc=pIhhkNI5azg%2F3xJZSlYpng%3D%3D.Sl7FIyClnfZP8ue92afayLTa92aDXh2XRYP1ovnawh%2B0ZFxpMd1Jkf3ruDD2ao6D)
这样的JS文件。TS并不能脱离编译器运行。
而且在使用 "Vue" 开发项目时并不是强制要求开发者使用 "TypeScript" 来编写代码的,TS只是一个可供选择的选项。
***
另外即使改名了也不会是 "VueTS" 而是 "Vue",参考 "AngularJS" 👉 "Angular"。现在文档中大部分情况自称也都是 "Vue"
通了顺畅了
为什么 parseInt() 函数不包含操作内容体?
看js 的原生库函数,比如:parseInt(),为什么库函数只写了函数名和参数和返回类型,
没有写 {要操作的内容体} 呢?
https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241023/98d994554cb1620912359f0e9775a32b.png
通了顺畅了
抱歉。安装 AMH 失败了?
是什么配置的服务器,
上面有提示进程被Killed掉了,看服务器内存是否用满,与是否全新的系统安装amh。
通了顺畅了
请教一个正则的问题?
试试这个 "/\d+\..*?(?=\d\.|$)/g"
"snipaste_2024-01-11_11-05-53.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241015/a4ff45bff11d66909c0ad3dc06f38120.png)
"嗨正则
(hiregex.com)" (https://link.segmentfault.com/?enc=5m2dNP7w2ELUcWrO7RMytg%3D%3D.A24mSiDhOYKhWAv1X3ryO7p%2FmDso5CBWhjCL6098Fuk%3D)
通了顺畅了
接口接收参数序列化日期localdate的时候报错了?
前端传参到后端服务一接口,服务一调用第二服务接口时,服务二接口接收日期参数序列化的时候报错了
前端传参
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/8c311e370ac83631ef4efb4279b68a0b.png)
两个接口的实体类字段用的都是这个
@NotNull(message = "日期不能为空", groups = {AddGroup.class})
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate replaceDate;
服务一接口
public ResJson addxxx(@Validated({AddGroup.class}) @RequestBody XxxDto xxxDto)
服务器一调用服务器二的方法
public static String sendPost(T clazz, String url) {
JSONObject jsonObject = JSONUtil.parseObj(clazz);
HttpServletRequest request = ServletUtils.getRequest();
String authorization = request.getHeader(Constants.AUTHORIZATION);
return HttpUtil.createPost(url)
.header(Constants.AUTHORIZATION, authorization)
.body(jsonObject.toString()).timeout(20000).execute().body();
}
服务器二接口
public ResJson getXXX(@RequestBody XxxDto xxxDto)
报错内容
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Invalid value for Year (valid values -999999999 - 999999999): 4665973755; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Invalid value for Year (valid values -999999999 - 999999999): 4665973755 (through reference chain: com.xxx.xxxDto["replaceDate"])
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.22.jar:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.22.jar:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:665) ~[javax.servlet-api-4.0.1.jar:4.0.1]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.22.jar:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) ~[javax.servlet-api-4.0.1.jar:4.0.1]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) ~[shiro-core-1.5.3.jar:1.5.3]
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) ~[shiro-core-1.5.3.jar:1.5.3]
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) ~[shiro-core-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[shiro-web-1.5.3.jar:1.5.3]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124) ~[druid-1.1.20.jar:1.1.20]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.22.jar:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.65.jar:9.0.65]
at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_181]
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid value for Year (valid values -999999999 - 999999999): 4665973755 (through reference chain: com.rbc.lpss.entity.iot.beacon.dto.IotBeaconReplaceDto["replaceDate"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:392) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:351) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1821) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:393) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) ~[jackson-databind-2.13.3.jar:2.13.3]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) ~[spring-web-5.3.22.jar:5.3.22]
... 64 more
Caused by: java.time.DateTimeException: Invalid value for Year (valid values -999999999 - 999999999): 4665973755
at java.time.temporal.ValueRange.checkValidIntValue(ValueRange.java:330) ~[?:1.8.0_181]
at java.time.temporal.ChronoField.checkValidIntValue(ChronoField.java:722) ~[?:1.8.0_181]
at java.time.LocalDate.ofEpochDay(LocalDate.java:341) ~[?:1.8.0_181]
at com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer.deserialize(LocalDateDeserializer.java:132) ~[jackson-datatype-jsr310-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer.deserialize(LocalDateDeserializer.java:36) ~[jackson-datatype-jsr310-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:391) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) ~[jackson-databind-2.13.3.jar:2.13.3]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) ~[spring-web-5.3.22.jar:5.3.22]
... 64 more
通了顺畅了
访问对象属性失败?
单纯看你提供的代码,明显是 "toRaw" 这个方法有问题,返回值和你想的不一样的
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/a218e1e15109d9a50531bc08cb2fea20.png)
通了顺畅了
前端如何打开后端返回html文件链接?
再来个"Content-Type: text/html; charset=UTF-8"
把"Content-Disposition"这个头删掉
看看百度(或者其他任意正常网页)返回的是啥就知道了
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241013/d0936956ee9ef7e08145017366eb0bb9.png)
通了顺畅了
Python串口通信问题:如何解决指令无法从PC发送到单片机的问题?
编写了一个基于python的串口通信,在ubuntu系统上通过串口来控制单片机,现在遇到的问题是运行python代码后,串口可以正常连接,但是指令没办法从PC端发到单片机端口,给单片机手动复位下后,指令就可以发送到单片机了,然后单片机正常控制电机。端口为ttyUSB0,端口权限也给了,实在想不明白什么问题,求大佬们解决一下。代码如下所示。
import serial
import threading # 导入线程包
import time
import sys
#串口初始化
data_ser = serial.Serial()
data_ser.port='ttyUSB0'
data_ser.baudrate=115200
data_ser.bytesize=8
data_ser.stopbits=1
data_ser.parity="N"#奇偶校验位
data_ser.setDTR(False)
data_ser.setRTS(False)
try:
data_ser.open()
print(f"成功打开串口")
except serial.SerialException as e:
print(f"无法打开串口: {e}")
sys.exit(1)
stop_event = threading.Event()
def get_data():
while not stop_event.is_set(): # 使用 Event 判断线程是否需要停止
try:
data_count = data_ser.inWaiting()
if data_count != 0:
recv = data_ser.read(data_ser.in_waiting).decode("gbk", errors="ignore")
time.sleep(1)
print(recv)
process_received_data(recv) # 在这里调用处理函数
except Exception as e:
print(f"读取串口数据时出错: {e}")
time.sleep(0.1)
data_thread = threading.Thread(target=get_data)
def process_received_data(recv):
# 假设 recv 是类似 "start:middle:end" 的形式
start_marker = 'MaiChong2的值为:'
end_marker = 'MaiChong3'
# 找到起始和结束标记的位置
start_index = recv.find(start_marker)
end_index = recv.find(end_marker)
if start_index != -1 and end_index != -1:
# 从起始标记后到结束标记前的位置截取字符串
middle_part = recv[start_index + len(start_marker):end_index].strip()
print(middle_part)
else:
print(f"Start or End marker not found")
data_thread.start()
angle1 = 'abcd700e1500f1000g0h250i0' + 'j0k0l0\r\n'
data_ser.write(angle1.encode('utf-8'))
# 等待一段时间,让线程运行
time.sleep(5)
相同的程序将端口ttyUSB0换为COM11后,在windows系统上可以正常运行,不用手动复位。
通了顺畅了
如何播放二进制音频流且能拼接长度?
流式播放呗?
试试 AudioContext,有个 "createMediaStreamSource" 的 API,就是用于流式播放的。
GitHub 上用 “streaming audio play” 做关键字应该能搜到一些示例。
通了顺畅了
如何解决vite.config.js代理配置失效问题?
vite.config.js的代理配置失效
问题描述:一个前后端分离项目,前端为vue3+vite4项目,
我提供的后端接口为7002,url为"http://localhost:7002/user/info" (https://link.segmentfault.com/?enc=KYAfLbjcckM4%2F12ABYXczg%3D%3D.%2F2my3F8J1Rl4DV%2FhJIxWPDyEIEJPCdhyTpQ32T7Rni8%3D)
https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/286e4cf56a145ae364847465fe22057b.png
我在vite.config.js做了代理的配置,这个配置一直不生效,
https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/83a854ed78bc9b22c1d5ac48c2d15867.png
"GSD6Y7`}N$IB6I7ZMB_79TE.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/f88d41c5a18dbd1ff0c1b33da3001726.png)
实际请求路径一直是"http://localhost:4000/user/info" (https://link.segmentfault.com/?enc=4qFzXFJ3jcxDiMqeVJii7w%3D%3D.ve2jsG5%2F6bRikz%2FyMHPhiIUJBHwRCyLFMSI5ged2fYU%3D),一开始请求失败404,后来莫名其妙请求成功了,并且返回数据为我后端"http://localhost:7002/user/info" (https://link.segmentfault.com/?enc=xQPCxlaF8%2FmKxZZyGKsI3g%3D%3D.fj4qKaXtxQ46a1acN7f7a2P9q8ErtY7AN8XZV%2FnMXpw%3D)接口的数据,但是实际请求路径仍然是"http://localhost:4000/user/info" (https://link.segmentfault.com/?enc=5nmcUuApL7KVg8H1j3ZbUA%3D%3D.expSWO%2FMgqaYaWO2hfyfXGqtLFFtsCE74xOOdWaz4%2B8%3D),这是什么问题?
"VVX2V1F`2BUAWQ9D215VP{Y.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/e240e16ac837741bdbac18ada5bd6fd3.png)
https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/c976f68b0742c5f818b164eb200a183e.png
后续:
增加了新配置
"23803.jpg" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/f33aee35964b6270316a938e3d7699fb.png)
7002和7004的请求成功了,但是7003的不成功
什么原因?
通了顺畅了
vite如何引入静态js文件?
monorepo 的话,你直接在项目里 import 应该就可以了,要不贴一下代码看看?
monorepo 不要用相对路径,直接用包名,比如 "@local/common",然后 "import someRepo from '@local/common'" 来用。
至于 import 之后不能用,可能是你的 JS 不是用 ESM?如果是的话,直接 "a.b" 或者 "a.default" 就可以了。
通了顺畅了
java 使用 websocket 的包, 连接 wss 的 websocket 失败?
你应该使用js来进行连接Websocket,或者使用工具,比如 "http://www.jsons.cn/websocket/"
或者新版的postman是能支持Websocket,浏览器直接访问ws是不行的
通了顺畅了
鸿蒙4.0系统下的扫码支付与付款码功能支持么?
鸿蒙4.0 支持扫码支付,付款码等功能么
相关案例或者可实现的方案或者项目demo
通了顺畅了
ArkTS装饰器监听属性变化问题?
@Watch用于监听状态变量的变化,当状态变量变化时,@Watch的回调方法将被调用。@Watch在ArkUI框架内部判断数值有无更新使用的是严格相等(===),遵循严格相等规范。当在严格相等为false的情况下,就会触发@Watch的回调。使用方法可以改成:
@State
@Watch('onCounterChanged') counter: number = 0;
onCounterChanged(newValue: number, oldValue: number) {
console.log(`Counter changed from ${oldValue} to ${newValue}`);
}
关于watch的详细说明可以查看官方文档:"https://developer.huawei.com/consumer/cn/doc/harmonyos-guides..." (https://link.segmentfault.com/?enc=JMWqBBG6ad7KWdVzmP8ycQ%3D%3D.FQScaug0Tjl2%2BzuuFxqSi4BpfWr7%2B2gTs9Is7m8x7BreGHb%2F3vaHf%2BYy9vuUObMQHHTTubp3RKxq24XSuxsi7fReKWoQ4iKl4DpPR%2FrgpnvU5XzVLtCMbe7PzEk7YDik)
«本文参与了"思否 HarmonyOS
技术问答马拉松" (https://segmentfault.com/a/1190000044600728),欢迎正在阅读的你也加入。»