【问题标题】:Vue component not updating when data changes without :keyVue 组件在没有 :key 的情况下数据更改时不会更新
【发布时间】:2019-10-09 08:04:12
【问题描述】:

我的应用中有这个简单的面包屑组件。有一个数据属性pickTable,但是当它更改时,组件不会重新渲染。但是当我添加 :key="pickedTable" 时,它会重新渲染。为什么会这样?

有其他人遇到过这个问题吗?

export default {
    template: `
        <div class="cr-snackbar">
            <div class="cr-snackbar-selection">
                Table {{ pickedTable }}
            </div>
        </div>
    `,

    data()
    {
        return {
            pickedTable: '2',
        }
    },

    mounted()
    {
        setInterval(() => {
            this.pickedTable = '3'
        }, 3000)
    }
}

我的解决方案是添加密钥

<div class="cr-snackbar-selection" :key="pickedTable">
  Table {{ pickedTable }}
</div>

【问题讨论】:

  • 你的最低限度真的反映了这个问题吗?对我来说它看起来很好 - 设置器被触发 - 观察者将它添加到更新钩子 - 应该更新 Dom 并在下一个动画帧中重绘?
  • @Estradiaz 通常是这样,但由于某种原因它没有重绘

标签: javascript vue.js vue-component


【解决方案1】:

这不是问题,而是功能。

Vue 使用一种算法来最小化元素移动,并尝试尽可能多地就地修补/重用相同类型的元素。有了键,它会根据键的顺序变化对元素进行重新排序,并且不再存在键的元素将始终被删除/销毁。

这里是官方文档:https://vuejs.org/v2/api/#key

这是一篇关于组件重新渲染的好文章:https://michaelnthiessen.com/force-re-render/

【讨论】:

  • 什么时候可以在 vue js 中观察到这个问题?
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 2019-06-26
  • 2021-11-11
  • 2020-03-25
相关资源
最近更新 更多