HarmonyOS 鸿蒙Next 关于Arkts代码的问题求助
HarmonyOS 鸿蒙Next 关于Arkts代码的问题求助 我有一个这样的数组
@State list:Array<any>=[
{
shixiang:"考试",
day:"2023-09-25"
},
{
shixiang:"英语考试",
day:"2023-09-19"
}
];
然后通过循环渲染,去创建自定义组件
ForEach(this.list,(item,idx)=>{
_Card({
info:item,
})
})
我现在希望点击按钮,改变list中第一个元素的shixiang字段的值,然后在自定义组件里同步渲染
我代码原本是这么写的:
let list = this.list;
list[0].shixiang = "a";
this.list = list;
console.log("applog:"+JSON.stringify(this.list))
然后通过console.log打印出来发现,list的值的确被改变了,但是自定义组件那里没有被渲染
然后换了种写法
this.list = [
{
shixiang:"考试3",
day:"2023-09-25"
},
{
shixiang:"英语考试2",
day:"2023-09-19"
}
]
console.log("applog:"+JSON.stringify(this.list))
这样写,不仅打印出来的能改变,而且自定义组件里的值也改变了
我的问题是,既然打印出来的值都变了,为什么第一种写法组件里的不变,第二种就变了呢?
更多关于HarmonyOS 鸿蒙Next 关于Arkts代码的问题求助的实战教程也可以访问 https://www.itying.com/category-93-b0.html
使用array<>的时候,<>这个结构是一个完整的数据类型,里面的具体参数只是这个数据类型的一个属性,@state的原理只能检测<>指向的变量有没有发生变化,无法查询到变量具体的属性变化。
更多关于HarmonyOS 鸿蒙Next 关于Arkts代码的问题求助的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
明白了,所以我第二种可行的写法,说白了就是把<>
指向的变量直接替换掉了,当然发生了变化,所以才有效,
大佬,
我是先let list
拿到@State
list
,然后对list
做了修改,再赋值的,而且通过打印this.list
,也发生了变化的,
HarmonyOS的ArkTS是一种基于TypeScript的编程语言,主要用于开发鸿蒙应用的UI组件和逻辑。ArkTS结合了TypeScript的静态类型检查和HarmonyOS的UI框架,提供了更高效的开发体验。在处理ArkTS代码时,开发者通常会遇到UI组件定义、状态管理、事件处理等问题。例如,使用@Component
装饰器定义自定义组件,@State
和@Link
用于管理组件状态,@Prop
用于父子组件之间的数据传递。事件处理则通过@Watch
监听状态变化或直接绑定事件处理函数。ArkTS还支持模块化开发,允许开发者将代码拆分为多个模块以提高可维护性。在调试ArkTS代码时,可以使用鸿蒙DevEco Studio提供的工具进行实时预览和调试。