HarmonyOS 鸿蒙Next:arkts语言,如何给@State修饰的number类型赋一个空值(null&undefined都不行)

HarmonyOS 鸿蒙Next:arkts语言,如何给@State修饰的number类型赋一个空值(null&undefined都不行)

这个页面-刚进入app,默认的页面会展示num的默认值0,如何给num的初始值设置为空啊,试过了null和undefined都不行,都会导致程序崩溃!

@Entry
@Component
struct Components_5 {
  private fruits: string[] = ['apple', 'orange', 'peach', 'grape']
  [@State](/user/State) txt: string = ''
  [@State](/user/State) num: number = 0

  build() {
    Column() {
      TextPicker({ range: this.fruits, selected: 1 }).defaultPickerItemHeight(30).width('80%').onChange((value: string, index: number) => {
        this.txt = value
        this.num = index
      })

      Text(this.txt).margin({ top: 30 })
      Text(this.num.toString())
    }.width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next:arkts语言,如何给@State修饰的number类型赋一个空值(null&undefined都不行)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

20 回复

其实你是想在初始化,也就是第一次时Text(this.num.toString()) 这里显示出来的是空,对吗?如果是,你可以这样处理一下:

@State num: number = -1
Text(this.num == -1 ? '' : this.num.toString())

更多关于HarmonyOS 鸿蒙Next:arkts语言,如何给@State修饰的number类型赋一个空值(null&undefined都不行)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


狼哥厉害!!!谢谢,

不客气,互相学习,

思路错了,用state都需要初始化,如果不要显示默认值的话,需要用别的方法。所以真正的问题在于,你的需求是什么?

谢谢,用狼哥的办法解决啦!

确实,我的思路就是有问题的!害!还好有你们帮俺,真谢谢,

项目名称

  • 状态:已上线
  • 技术栈:Python, JavaScript, HTML, CSS
  • 简介
    • 项目旨在提供一个高效的工作流管理工具。
    • 支持用户自定义工作流程。
    • 提供实时协作功能。

成员

  • 张三
  • 李四
  • 王五

any也不行,给默认值都会报错!
@State num: number | string = '';

想起来了,用@state装饰的变量一定要初始化,这个是有要求的,

@State num: number | string = '' 这样写可以实现,但是有个问题,当我进入页面的时候,把指示器往下滑一个位置到apple,这个num不会显示出来,其他情况都正常,
  1. 基本信息 |
  2. 名称 | null
  3. 版本 | 1.0.0
  4. 作者 | John Doe

没有null类型的!不可以这样写!但是 @State num: number | string = ‘’ 这样写貌似可以!

写num:?number,

也不行,写法就会报错,

首先,@State修饰的变量必须初始化,所以你不能赋值为null,其次因为@State的变量可以刷新,所以你如果要实现动态修改值,可以就初始化一个数值,然后变动的时候进行刷新

问题就在:还想使用@state,还不想初始化一个数值,

文档定义了使用@state就必须初始化数值,

在HarmonyOS鸿蒙Next中,使用ArkTS语言时,@State修饰的number类型不能直接赋值为nullundefined,因为number类型是值类型,不支持空值。如果需要表示可能为空的情况,可以使用undefinednull的替代方案。

一种常见的做法是将number类型改为number | undefinednumber | null,这样可以在需要时赋值为undefinednull。例如:

@State myNumber: number | undefined = undefined;

或者:

@State myNumber: number | null = null;

这样,myNumber就可以在需要时被赋值为undefinednull,同时仍然可以正常存储number类型的值。

如果确实需要表示一个空的number状态,可以考虑使用一个特殊的值(如NaN0)来表示空状态,但这取决于具体的业务逻辑。

总结:number类型本身不支持nullundefined,但可以通过联合类型number | undefinednumber | null来实现类似的效果。

回到顶部