为什么无法通过this访问HarmonyOS鸿蒙Next中的变量?

为什么无法通过this访问HarmonyOS鸿蒙Next中的变量?

import preferencesAPI from '../../database/preferences-database';
import MainView from './MainView';

@Entry
@Component
struct Index {
  @State isPreferencesInit: Boolean = false

  build() {
    Row() {
     if(this.isPreferencesInit){
       Text('赋值成功')
     } else {
       MainView()
     }
    }
    .height('100%')
    .onAppear(async ()=>{
      const state= await new Promise<(value:Boolean)=>void,rej>((res, rej)=>{
        const tot= setTimeout(t,100)
        function t(){
          if(preferencesAPI.isHas){
            clearTimeout(tot)
            console.log('获得preferences')
            res(true)
          }
        }
      })
      this.isPreferencesInit=state
      console.log(`${this.isPreferencesInit}-${state}`)
    })
  }
}

this.isPreferencesInit在onAppear里无法访问,打印出来是undefined。
请问我的代码出现了什么问题?

更多关于为什么无法通过this访问HarmonyOS鸿蒙Next中的变量?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

自己弄明白了。

不能用布尔类型,编程数字之后就正常了。

更多关于为什么无法通过this访问HarmonyOS鸿蒙Next中的变量?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


并非不能用布尔类型,你把Boolean 改为 boolean 试试,

原来是把type写成class了。

在HarmonyOS鸿蒙Next中,无法通过this访问变量可能是因为你在使用ArkTS语言开发时,未正确绑定上下文或未遵循ArkTS的语法规则。ArkTS是鸿蒙Next中用于开发应用的编程语言,它基于TypeScript并进行了扩展。在ArkTS中,this的指向与JavaScript或TypeScript有所不同,特别是在类方法或组件方法中,this可能不会自动绑定到当前实例。

如果你在类方法或组件方法中使用this,确保方法是通过实例调用的,而不是作为回调函数传递,否则this可能会指向错误的对象。此外,在ArkTS中,某些情况下需要使用bind方法显式绑定this,以确保它指向正确的实例。

另一个可能的原因是你可能在函数式组件或箭头函数中使用this,而在这些情况下,this的指向与类方法不同。函数式组件或箭头函数中的this通常指向外层作用域,而不是组件实例。因此,如果你需要在函数式组件中访问组件实例的变量,建议使用闭包或状态管理工具来存储和访问这些变量。

总结来说,无法通过this访问变量可能是由于this的指向问题或未正确遵循ArkTS的语法规则。确保this指向正确的实例,并在必要时显式绑定上下文。

在HarmonyOS鸿蒙Next中,无法通过this访问变量,通常是因为作用域或上下文问题。this指向当前对象实例,若在异步回调、箭头函数或静态方法中使用this,可能无法正确访问实例变量。确保在正确的作用域内使用this,或通过bind方法绑定上下文。

回到顶部