请问下面的代码中,HarmonyOS 鸿蒙Next引用传递的值为什么没有修改?
请问下面的代码中,HarmonyOS 鸿蒙Next引用传递的值为什么没有修改?
//按引用传递参数
/***
* 1. 需要修改原始数据的值,而不仅仅是对数据进行读取操作。
* 2. 希望在函数或方法内部对参数进行修改,并且希望这些修改对原始数据产生影响。
*/
@Builder function ABuilder($$: { paramA1: string }) {
Row() {
Text(UseStateVarByReference: ${$$.paramA1}
)
}
}
//按值传递
// 函数或方法内对参数的修改不会影响到原始数据
@Builder function ABuilder2(paramA1: string) {
Row() {
Text(UseStateVarByValue: ${paramA1}
)
}
}
//??为啥无法改变值
function changeValue($$: { paramA1: string }) {
$$.paramA1 = ‘changed name’;
}
@Entry
@Component
struct Parent {
@State label: string = ‘Hello’;
build() {
Column() {
// 在Parent组件中调用ABuilder的时候,将this.label引用传递给ABuilder
ABuilder({ paramA1: this.label })
Button(‘Click me1’).onClick(() => {
// 点击“Click me”后,UI从“Hello”刷新为“ArkUI”
// this.label = ‘ArkUI’;
changeValue({ paramA1: this.label })
console.log(‘label’, this.label)
})
ABuilder2(this.label)
Button(‘Click me2’).onClick(() => {
// 点击“Click me”后,UI从“Hello”刷新为“ArkUI2”
this.label = ‘ArkUI2’;
})
}
}
}
最后的代码
[@Builder](/user/Builder)
function ABuilder($$: { paramA1: string }) {
Row() {
Text(${$$.paramA1}
).hitTestBehavior(HitTestMode.None)
}.onClick(() => {
$$.paramA1 = “Builder改值: 222222222”
})
}
//??为啥无法改变值
function changeValue($$: { paramA1: string }) {
$$.paramA1 = 方法改值: <span class="hljs-number">111111111111</span>
}
@Entry
@Component
struct Parent {
@State paramA1: string = ‘…’;
build() {
Column() {
ABuilder(this)
Button(‘Click me1’).onClick(() => {
changeValue(this)
})
}.width(‘100%’).backgroundColor(Color.Red).padding({ top: 200 })
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
文档上没说单独的方法啊我看,都是基于@Builder的前提
就是你写的这种啊 @Builder function ABuilder($$: { paramA1: string })
在HarmonyOS鸿蒙系统中,如果你发现Next引用传递的值没有修改,这通常是由于以下几个原因导致的:
-
值类型与引用类型混淆:在Java或类似语言中,基本数据类型(如int, float等)是按值传递的,而对象是按引用传递的。如果你传递的是一个基本数据类型的包装类或值类型变量,那么实际上传递的是其副本,修改副本不会影响原变量。
-
方法内部未正确修改引用对象:确保在方法内部,你修改的是引用对象本身的属性或内容,而不是重新赋值一个新的对象给该引用。
-
线程安全问题:如果你的代码在多线程环境下运行,可能存在线程安全问题,导致修改未生效或被覆盖。
-
作用域问题:检查变量是否在正确的作用域内被修改和访问。
-
方法返回值未使用:如果方法设计为返回修改后的值,确保调用者接收并使用了这个返回值。
检查以上几点,确保你的代码逻辑正确,并且符合HarmonyOS鸿蒙系统的编程规范。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html