javascript - Vue 列表项在状态更改时不会重新渲染

标签 javascript arrays vue.js vuejs2

我有一些对象数组,当用户单击按钮时,我获取新数组并显示一些结果。

在我获取第二个数组之前它工作正常。当我获取第一个包含一个元素的数组,然后获取包含两个元素的数组时,它仅更改(添加或删除)第二个元素。

如何更改数组值:

fetchAsync(result){
  this.issue = result.body;
}

问题是什么样的?

const issues = [
  {
    "id":100,
    "key":"DEMO-123",
    "summary":"Demo issue description",
    "devices":[
      {
        "id":100,
        "name":"iPhone6S",
        "browsers":[
          {
            "id":100,
            "name":"Safari",
            "displayVariants":[
              {
                "id":100,
                "issueKey":"DEMO-123",
                "state":1,
                "browserName":"safari",
                "user":"user-1",
                "landScope":false
              }
            ]
          }
        ]
      }
    ]
  }
]

更改的值是 issues[].devices[].browsers[].displayVariants[].state

当出现嵌套更改时,如何强制 Vue 重新渲染此组件?

<小时/>

[编辑]

我呈现这样的问题:

  <tr v-for="issue in issues">
    <td>
      <div>{{ issue.key }}</div>
      <div class="issue-description">[ {{ issue.summary }} ]</div>
    </td>
    <template v-for="d in issue.devices">
      <td v-for="browser in d.browsers">
        <!--{{ d }}-->
          <device v-for="variant in browser.displayVariants"
                  :variant="variant"
                  :browserId="browser.id"
                  :issueKey="issue.key"
                  :issueId="issue.id"
                  :deviceId="d.id"></device>
      </td>
    </template>
  </tr>

设备模板

<template>
  <svg viewBox="0 0 30 30" class="mobileSVG" @click="changeState" :class="[state, {landscape: variant.landScope}]">
    <use xlink:href="#mobile"/>
  </svg>
</template>

最佳答案

我认为将 key 添加到您的列表中可以解决问题:

https://v2.vuejs.org/v2/guide/list.html#key

Vue 尝试对 DOM 进行最小程度的更改,并认为第一项没有更改,因此不会重新渲染。在您的情况下,您已经拥有 id,使用它作为 key 应该可以解决问题。

关于javascript - Vue 列表项在状态更改时不会重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43150784/

相关文章:

javascript - React.addons.batchedUpdates API 的用途是什么?

javascript - 遍历复选框并有条件地禁用未选中的

c++ - 我可以使用变量来指定结构成员数组的大小吗?

c# - 在不指定键的情况下向数组添加值 C#

arrays - powershell多维数组和foreach

javascript - 从一棵树到另一棵树的Vue可拖动树节点

javascript - 在 JavaScript 函数中获取正确的值时出现问题

javascript - 浏览器加载策略,<head>...<body>

Vue.js 1.x 与 Vue.js 2.x 表格渲染和字段焦点

vue.js - 不使用mutations直接改变Vuex状态