HarmonyOS鸿蒙Next中为什么builder里的参数传不出去啊?

HarmonyOS鸿蒙Next中为什么builder里的参数传不出去啊?

组件外:

class GlobalTmp {
  placeholderText: string = '';
  input: number = 0;
  function: () => void = () => {};
}

组件内:

@State input = 0;
@Builder textInput($$: GlobalTmp) {
    TextInput({ placeholder: $$.placeholderText })
      .inputFilter("[0-9\\.]")
      .onChange((value) => {
        $$.input = Number(value);
        $$.function()
      })
}

build(){
...
this.textInput({
            placeholderText: '仅支持正数',
            input: this.input,
            function: this.function
          })
...
}
function() => {
  console.log(this.input)
}

无论怎么输入,function里打印的日志都是0,这是为什么呢?如何才能把builder里修改过的input传递出来?


更多关于HarmonyOS鸿蒙Next中为什么builder里的参数传不出去啊?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

@Builder修饰的函数内部,不允许改变参数值。

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5

可以调方法,通过传参接收。

class GlobalTmp {
  placeholderText: string = '';
  input: number = 0;
  function: Function = (value: string) => {
  }
}

@Entry
@Component
struct Page03 {
  @State input: number = 0;

  [@Builder](/user/Builder)
  textInput($$: GlobalTmp) {
    TextInput({ placeholder: $$.placeholderText })
      .inputFilter("[0-9\.]")// .type(InputType.Number)
      .onChange((value) => {
        ($$.function)(value)
      })
  }

  function = (value: string) => {
    this.input = Number(value)
    console.log(`this.input:${this.input}`)
  }

  build() {
    Column() {
      Row() {
        this.textInput({
          placeholderText: '仅支持正数',
          input: this.input,
          function: this.function
        })
      }

    }
    .height('100%')
    .width('100%')
  }
}

@Builder装饰器限制颇多,很容易出现各种问题,不建议使用,不如多写几行代码封装自定义组件。

更多关于HarmonyOS鸿蒙Next中为什么builder里的参数传不出去啊?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好吧,那也没办法,只能多写代码来解决这个问题了。

因为我的function需要用到很多个类似的textinput获取到的值,这些值都存储在组件的state变量中,因此不能通过简单的传值来处理,所以您给出的的方法对我来说没有用处,但是谢谢您的回复。

在HarmonyOS鸿蒙Next中,builder里的参数传不出去可能是由于以下几个原因:

  1. 参数绑定问题:确保参数在builder方法中正确绑定。如果参数没有正确绑定,可能会导致参数传递失败。

  2. 生命周期管理:检查参数是否在正确的生命周期内传递。如果参数在组件生命周期之外传递,可能会导致参数无法正确传递。

  3. 作用域问题:确保参数在正确的作用域内传递。如果参数作用域不正确,可能会导致参数传递失败。

  4. 数据类型匹配:检查参数的数据类型是否匹配。如果数据类型不匹配,可能会导致参数传递失败。

  5. 组件状态管理:确保组件状态管理正确。如果组件状态管理不当,可能会导致参数传递失败。

  6. API使用问题:检查是否使用了正确的API进行参数传递。如果API使用不当,可能会导致参数传递失败。

  7. 调试信息:查看调试信息,检查是否有错误或警告信息提示参数传递失败的原因。

  8. 版本兼容性:确保使用的HarmonyOS版本与代码兼容。如果版本不兼容,可能会导致参数传递失败。

  9. 代码逻辑错误:检查代码逻辑,确保没有逻辑错误导致参数传递失败。

  10. 依赖库问题:检查是否使用了正确的依赖库。如果依赖库不正确,可能会导致参数传递失败。

以上是可能导致HarmonyOS鸿蒙Next中builder里的参数传不出去的一些常见原因。

在HarmonyOS鸿蒙Next中,builder参数传不出去可能是由于以下原因:

  1. 参数作用域问题,确保参数在正确的作用域内传递;

  2. 参数类型不匹配,检查参数类型是否符合预期;

  3. 回调函数未正确处理参数,确保回调函数正确接收和处理参数。

检查这些方面,通常可以解决参数传递问题。

回到顶部