首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >React类中的方法未执行

React类中的方法未执行
EN

Stack Overflow用户
提问于 2019-06-20 07:52:11
回答 1查看 13关注 0票数 0

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

代码语言:javascript
复制
export default class Category extends Component {}

为了缩短代码,我不会包含所有内容,但下面的代码在这个类中。

我有以下方法,当在按钮上执行时,它可以工作:

代码语言:javascript
复制
  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不是。函数

代码语言:javascript
复制
  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;
  }

this.dbGetValues可以在其他方法中工作,但是当放在forEach中时,它会给我这个错误。我知道这与作用域有关,但我不明白为什么。既然我在react类中,它就不能工作吗?我已经读了很多关于“这个”的文章,但我仍然不了解它。

我甚至尝试过绑定this.dbGetValues = this.dbGetValues.bind(this);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 08:00:02

可以肯定的是,由于dbGetTemplateOptions是一个常规函数,所以当它被调用时,它的上下文是绑定的。这意味着this不是您期望的对象。

您可以通过将dbGetTemplateOptions转换为箭头函数来修复它,这样this将始终为this object

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

你的这一行:

代码语言:javascript
复制
subcategories.forEach(function (item) {

使用function。这意味着当forEach调用你的函数时,它的上下文会有不同的绑定。尝试将function (item) {更改为item => {

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56677302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档