arrays - ajax请求后填充状态属性
问题描述
我有一个问题reactjs
。我想将另一个属性 ( productGroups
) 添加到现有状态 ( this.state.mainProductGroups
- type object array
)。所以我想在数组中找出对应的条目并将新属性添加到其中。这是我的功能:
getProductGroups(mainProductGroupId) {
$.ajax({
type: "POST",
context:this,
dataType: "json",
async: true,
url: "ajax.php",
data: ({
requestType: 'getProductGroups',
countryID: this.state.countryObject.countryNo,
languageID: Language[this.state.currentLanguage].languageNo,
mainProductGroupID: mainProductGroupId,
}),
success: function (data) {
let mainProductGroups = this.state.mainProductGroups;
let mainPGFound = false;
let mainPG = mainProductGroups.filter(mainProductGroup => mainProductGroup.id == mainProductGroupId);
mainPG.productGroups = data.productGroups;
this.setState({
mainProductGroups: mainProductGroups,
});
}
});
}
这是一个数据示例this.state.mainProductGroups
:
现在的问题是,该productsGroup
物业没有被填满。ajax 请求返回正确的值(也是 type object array
)。为什么不更新?有问题吗,因为属性的初始值productGroups
是string
,现在我想用object array
? 难道我做错了什么?我是不是想错了?感谢您的任何帮助!
解决方案
将您的成功处理程序更改为此
success: function (data) {}
由此
success: (data)=> {}
查看何时设置状态,同时编写function
它是this
回调中上下文的新范围。所以它不会从上下文中this
找到。this
你需要的是一个带有箭头函数的词法作用域。在这种情况下,这是您需要的。
这里的问题是
通常,如果我们正在编写 ES5,我们将使用 Function.prototype.bind 之类的东西从另一个作用域中获取 this 值,以更改函数的执行上下文。这将主要用于不同范围内的回调。
在这里查看更多
推荐阅读
- flutter - 如果字段无效,则带有验证的 DropdownButtonFormField 是不可点击的
- javascript - 具有 HH:MM:SS 格式的 ChartsJS 条形图
- java - 如何使用杰克逊在序列化/反序列化中保留额外的 json 字段?
- asp.net-core - 在 Kestrel 上运行应用程序时具有空属性的 User.Identity
- i3 - 在 i3wm 中,如何在启动时打开另一个工作区上的程序?
- python - 为什么使用 ckeditor 和 Django 时 MathJax 预览不显示?
- android - 添加多个回收视图的问题
- symfony - Symfony 5 - 用户登录 - 登录时没有数据库请求,因此 getUser 始终为空
- r - 拟合优度统计 Tobit 模型
- javascript - 如何在回调函数NodeJS之外获取变量值