React native React类内的方法未执行

React native React类内的方法未执行,react-native,React Native,我目前在React Native中有一个组件 export default class Category extends Component {} 为了缩短代码,我不会包含所有内容,但下面的代码就在这个类中 在按钮上执行时,我有以下方法: dbGetValues(subCatId) { let subValues = []; db.transaction(tx => { tx.executeSql( 'SELECT * FROM dr_te

我目前在React Native中有一个组件

export default class Category extends Component {}
为了缩短代码,我不会包含所有内容,但下面的代码就在这个类中

在按钮上执行时,我有以下方法:

  dbGetValues(subCatId) {
    let subValues = [];
    db.transaction(tx => {
      tx.executeSql(
        'SELECT * FROM dr_template_relational '
        + ' INNER JOIN  dr_report_categorie_values on dr_report_categorie_values.id = dr_template_relational.value_id'
        + ' WHERE dr_template_relational.subcategory_id = ' + subCatId + ' AND dr_template_relational.template_id = ' + this.state.currentTemplateId,
        [],
      (trans, result) => {
        const sqLiteResults = result.rows._array;

        sqLiteResults.forEach(el => {
          subValues.push({ subCategoryId: subCatId, values: el.value_id, name: el.name, narrative: el.narrative })
        })
      });
    },
    (err) => console.error(err),
    () => {
      return subValues;
    }
  );
  }
那么我有这个方法。在下面的方法中,我尝试执行:
dbGetValues()
。我得到的错误是dbGetValues不是。作用

  dbGetTemplateOptions() {
    let dataArray = [];
    let subcategories = this.state.subcategories;
    console.log(subcategories);
    subcategories.forEach(function (item) {
      dataArray.push({
        title: item.name,
        content: <Text>{this.dbGetValues(item.subCatId)}</Text>
      });
    });

    return dataArray;
  }
dbGetTemplateOptions(){
让dataArray=[];
让子类别=this.state.subcategories;
console.log(子类别);
子类别。forEach(功能(项){
dataArray.push({
标题:item.name,
内容:{this.dbGetValues(item.subCatId)}
});
});
返回数据数组;
}
this.dbGetValues在其他方法中工作,但当放置在forEach中时,会出现此错误。我知道这和范围有关,但我不明白为什么。既然我在反应课上,它不应该起作用吗?我读了很多关于“这个”的文章,但我还是没有记下来。
我甚至尝试了绑定
this.dbGetValues=this.dbGetValues.bind(this)

编辑:尝试将函数转换为胖箭头: dbGetTemplateOptions=()=>{} dbGetValues=(subCatId)=>{}
相同的结果。

相当确定的问题是,由于
dbGetTemplateOptions
是一个常规函数,因此在调用它时它的上下文是绑定的。这意味着
不是您期望的对象

您可以通过将
dbGetTemplateOptions
转换为箭头函数来修复它,这样
将始终是
此对象

编辑:我在这里看到另一个问题

你的台词是:

subcategories.forEach(function (item) {

使用
功能
。这意味着当forEach调用您的函数时,其上下文的绑定方式不同。尝试将
函数(item){
更改为
item=>{

是否可以尝试将所有方法转换为?更改为此dbGetTemplateOptions=()=>{stuff in here},对于dbGetValues也是如此,但仍然显示“dbGetValues”不是一个函数。@jClassic是同一个类中的两个函数吗?另外,运行
console.log(this.dbGetValues)
@fabricigyes时的输出是什么@JClassic@FabricioG尝试输出
this.dbGetValues的值