React native React类内的方法未执行
我目前在React Native中有一个组件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
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的值