我目前在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;
}
this.dbGetValues可以在其他方法中工作,但是当放在forEach中时,它会给我这个错误。我知道这与作用域有关,但我不明白为什么。既然我在react类中,它就不能工作吗?我已经读了很多关于“这个”的文章,但我仍然不了解它。
我甚至尝试过绑定this.dbGetValues = this.dbGetValues.bind(this);
编辑:尝试将函数转换为胖箭头: dbGetTemplateOptions = () => {} dbGetValues = (subCatId) => {}结果相同。
发布于 2019-06-20 08:00:02
可以肯定的是,由于dbGetTemplateOptions
是一个常规函数,所以当它被调用时,它的上下文是绑定的。这意味着this
不是您期望的对象。
您可以通过将dbGetTemplateOptions
转换为箭头函数来修复它,这样this
将始终为this object
。
编辑:我在这里看到了另一个问题。
你的这一行:
subcategories.forEach(function (item) {
使用function
。这意味着当forEach调用你的函数时,它的上下文会有不同的绑定。尝试将function (item) {
更改为item => {
https://stackoverflow.com/questions/56677302
复制相似问题