首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue fetch response.json承诺不创建反应性的getter

Vue fetch response.json承诺不创建反应性的getter
EN

Stack Overflow用户
提问于 2017-09-11 23:29:18
回答 1查看 1.3K关注 0票数 2

我有一个用类型记录编写的Vue应用程序,我使用Fetch从一个api检索数据。在我的一个组件中,定义了以下接口:

代码语言:javascript
复制
interface SearchResult {
    device_id: string;
    location: string;
    sub_location: string;
    status: string;
}

在我的Fetch方法中,我将response.json()承诺给SearchResult接口的一个数组,如下所示:

代码语言:javascript
复制
fetch(url).then(response => response.json() as Promise<SearchResult[]>)
          .then(data => { 
              this.results = data; 
          })

我遇到的问题是,如果response.json()中没有包含“status”,就不会为this.results.status创建反应性getter,这意味着我无法对数据进行变异并在页面上做出反应。

我尝试在行this.results = data之后手动设置' status‘的值,当我使用VueTools检查对象时,我可以看到它具有状态属性和我分配给它的值。但是反应型的吸气器和制动器仍然不见踪影。

我还尝试将接口更改为具有构造函数的类,构造函数为“status”设置默认值,但这也无法为属性创建反应性getter和setter。

如何在不显式地向api响应中添加“status”(或任何其他任意属性)的情况下创建反应性getter和setter?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-12 03:47:51

Vue无法检测属性添加到已经添加到数据中的对象,除非通过$set添加该属性。

将获取响应更改为:

代码语言:javascript
复制
fetch(url)
  .then(response => response.json() as Promise<SearchResult[]>)
  .then(data => { 
    this.results = data; 
    for (let result of this.results)
      this.$set(result, 'status', "some value");
  })

尽管你也应该能够逃脱:

代码语言:javascript
复制
fetch(url)
  .then(response => response.json() as Promise<SearchResult[]>)
  .then(data => { 
    this.results = data.map(d => d.status = "some value"); 
  })
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46165689

复制
相关文章

相似问题

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