首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Vue视图未更新再次踩坑

今天遇到一个Vue数据更新了,但是视图未更新的问题,折腾了我2小时才搞定,有必要记录下来,防止日后再次踩坑。 问题描述 我需要显示一个列表,而且列表是可编辑的。比如可以修改列表每一项的名称等。...我从后端获取列表后,对其中的每一项数据进行初始化,增加一个editing 可编辑属性。...在网上搜寻的过程中,我发现了有人问,为什么数据更新了,但是Vue Devtools中的数据未更新?...,或者使用了非响应式的数据,那么数据将无法在Vue Devtools中实时更新,但是你可以点击工具的刷新按钮,这时候可以看到数据进行了更新。...总结 问题是个小问题,也是我知道的问题。只是没想到它在最根源的地方犯了错,后面即使正确操作,也是于事无补。 要相信,当使用this.$forceUpdate() 的时候,99%的情况都是自己错了。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Vue中key的作用

    描述 首先是官方文档的描述,当Vue正在更新使用v-for渲染的元素列表时,它默认使用就地更新的策略,如果数据项的顺序被改变,Vue将不会移动DOM元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染...简单来说,当在列表循环中使用key时,需要使用key来给每个节点做一个唯一标识,diff算法就可以正确的识别此节点,找到正确的位置直接操作节点,尽可能地进行重用元素,key的作用主要是为了高效的更新虚拟...在下面的例子中可以看到没有key的情况下列表更新时渲染速度会快,当不存在key的情况下,这个列表直接进行原地复用,原有的节点的位置不变,原地复用元素,将内容更新为5、6、7、8、9、10,并添加了11与...在不设置key的情况下,元素中没有与数据data绑定的部分,Vue会默认使用已经渲染的DOM,而绑定了数据data的部分会进行跟随数据渲染,假如操作了元素位置,则元素中未绑定data的部分会停留在原地,...key得情况则直接复用元素,v-if控制的元素在初次渲染就已经决定,在本例中没有对其进行更新,所以不涉及v-if的DOM操作,所以在效率上会高一些。

    1.1K10

    使用Vue.js和Axios从第三方API获取数据 — SitePoint

    获取数据 — SitePoint,Github上面本项目的源代码链接为:vuejs-news,本文中的纽约时报API的API秘钥申请有些问题,访问不了。... v-for 指令用于渲染我们的 results 列表。 我们使用双花括号来显示每一项的内容。...获取的原始results来进行一些修改,然后对我们的视图进行一些更改。...计算的属性也是基于它们的依赖关系缓存的,所以只要results不变,processedPosts属性返回一个自己的缓存版本。这将有助于提升性能,特别是在进行复杂的数据操作时。...现在我们已经有一个功能齐全的Vue.js 2.0的应用程序,它围绕着 API 服务构建。 通过插入其他API可以进行大量的改进。

    6.6K20

    vue面试题总结(持续更新中)

    会对对象中的每一项进行求值,此时会将当前 watcher存入到对应属性的依赖中,这样数组中对象发生变化时也会通知数据更新源码相关get () { pushTarget(this) // 先将当前依赖放到...(Compiler):对每个元素节点的指令进行扫描跟解析,根据指令模板替换数据,以及绑定相应的更新函数Vue中修饰符.sync与v-model的区别sync的作用.sync修饰符可以实现父子组件之间的双向绑定...,子组件没有权利修改父组件传过来的数据,只能请求父组件对原始数据进行修改。...说下它们的区别history 这个对象在html5的时候新加入两个api history.pushState() 和 history.repalceState() 这两个API可以在不进行刷新的情况下,...而$router是“路由实例”对象包括了路由的跳转方法,钩子函数等v-if和v-for哪个优先级更高实践中不应该把v-for和v-if放一起在vue2中,v-for的优先级是高于v-if,把它们放在一起

    1.5K10

    12 种使用 Vue 的最佳做法

    这可能意味着v-for中的元素可能会出现乱序,或者它们的行为难以预测。如果我们对每个元素都有唯一的键引用,那么我们可以更好地预测Vue应用程序将如何精确地处理DOM操作。 中,驼峰式声明是标准,在HTML中,是短横线命名。因此,我们相应地使用它们。 幸运的是,Vue 已经提供了驼峰式声明和短横线命名之间转换,因此除了实际声明它们之外,我们不必担心任何事情。...不要在同个元素上同时使用`v-if`和`v-for`指令 为了过滤数组中的元素,我们很容易将v-if与v-for在同个元素同时使用。...11.不要在“created”和“watch”中调用方法 Vue开发人员经常犯的一个错误是他们不必要地在created和watch中调用方法。...希望这些技巧对您有用(因为它们绝对是我一直想记住的东西)。

    1.1K10

    Vue.js 中的常见错误

    不过,就像任何技术一样,它也有自己的学习曲线和可能的陷阱。 在这篇博客文章中,我们会聊聊开发者在使用Vue.js时常见的几个错误,并给出一些实用的建议来避免它们。...如果在使用像localStorage这样的原生浏览器API,可以使用一个可复用的包装器,比如VueUse里的useLocalStorage,它在API外面加上了一层响应式。...错误2:不正确使用计算属性 问题:计算属性是Vue.js中一个非常强大的特性,可以创建基于其他数据属性变化的动态值。...一个常见的错误是没有将应用程序分解成更小、可重用的组件,导致代码重复和难以维护的代码库。 解决方案:识别出可以独立或重用的应用部分,并将它们转换成组件。...记住,从错误中学习是软件开发旅程的一部分。 本文译自:https://vueschool.io/articles/vuejs-tutorials/common-mistakes-in-vue-js/

    14010

    Vue.js常见的性能优化手段

    本文将从几个常见的 Vue.js API 出发,结合实际场景,深入探讨如何通过正确使用这些 API 来进行性能优化。...computed 和watch 的合理使用computed 和 watch 都用于响应式数据处理,但在性能优化中,它们的使用场景是不同的。...因为v-for的优先级会大于v-if,这就会导致每一项都需要进行v-if判断。不信你可以看看页面上的dom节点会出现几个不满足条件的注释,这就是判断过后的痕迹。...由于这些配置在应用生命周期内不会改变,我们可以使用 Object.freeze 将其冻结,避免 Vue.js 对其进行多余的观察和响应式处理。...总结通过正确使用 Vue.js 的 API,不仅可以提高应用的性能,还能优化开发效率。

    24200

    化身面试官出 30+ Vue 面试题,超级干货(附答案)

    对 Vue 比较熟一些是吧~(这里只说 Vue 假设你就只熟练 Vue ) 那首先谈谈你对 Vue 的理解吧?...数组里每一项可能是对象,那么我就是会对数组的每一项进行观测,(且只有数组里的对象才能进行观测,观测过的也不会进行观测) vue3:改用 proxy ,可直接监听对象数组的变化。...这个可以是这个节点的唯一标识,告诉 diff 算法,在更改前后它们是同一个 DOM 节点 扩展 v-for 为什么要有 key ,没有 key 会暴力复用,举例子的话随便说一个比如移动节点或者增加节点(...最终手动调用 $mount() 进行挂载。更新组件时会进行 patchVnode 流程,核心就是 diff 算法。 组件中的 data 为什么是函数 答案 避免组件中的数据互相影响。...谈谈对 keep-alive 的了解 答案 keep-alive 可以实现组件的缓存,当组件切换时不会对当前组件进行卸载。

    2.4K10

    9个Vue开发技巧助力成为更好的工程师

    create 生命周期中调用一次,但这样的写法不优雅,或许我们可以使用这样的方法 export default { data() { return {...因为它们会在页面销毁后程序化的自主清除。 文档:cn.vuejs.org/v2/guide/co…[8] 9. 手动挂载组件 在一些需求中,手动挂载组件能够让我们实现起来更加优雅。...比如一个弹窗组件,最理想的用法是通过命令式调用,就像 elementUI 的 this.$message 。而不是在模板中通过状态切换,这种实现真的很糟糕。...95%B0%E5%BC%8F%E7%BB%84%E4%BB%B6 [4] cn.vuejs.org/v2/api/#wat…: https://cn.vuejs.org/v2/api/#watch [.../v2/api/#mod…: https://cn.vuejs.org/v2/api/#model [8] cn.vuejs.org/v2/guide/co…: https://cn.vuejs.org

    4.2K20

    Vue3.0新特性

    API的形式调用,实际上随着Composition API的引入,我们访问这些钩子函数的方式已经改变,我们所有的生命周期都应该写在setup中,此方法我们应该实现大多数组件代码,并处理响应式,生命周期钩子函数等...代理允许拦截在目标对象上的底层操作,而这原本是Js引擎的内部能力,拦截行为使用了一个能够响应特定操作的函数,即通过Proxy去对一个对象进行代理之后,我们将得到一个和被代理对象几乎完全一样的对象,并且可以从底层实现对这个对象进行完全的监控...在没有动态改变节点结构的模板指令(例如v-if和v-for)的情况下,节点结构保持完全静态,如果我们将一个模板分成由这些结构指令分隔的嵌套块,则每个块中的节点结构将再次完全静态,当我们更新块中的节点时,...其次,编译器积极地检测模板中的静态节点、子树甚至数据对象,并在生成的代码中将它们提升到渲染函数之外,这样可以避免在每次渲染时重新创建这些对象,从而大大提高内存使用率并减少垃圾回收的频率。...没有特殊指令的标记v-if/else-if/else、v-for、v-slot的现在被视为普通元素,并将生成原生的元素,而不是渲染其内部内容。

    3.3K10

    前端高频vue面试题总结3

    mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。...2.2 TeleportTeleport 是一种能够将我们的模板移动到 DOM 中 Vue app 之外的其他位置的技术,就有点像哆啦A梦的“任意门”在vue2中... 没有特殊指令的标记 (v-if/else-if/else、v-for 或 v-slot) 现在被视为普通元素,并将生成原生的 元素,而不是渲染其内部内容。...)v-if和v-for哪个优先级更高实践中不应该把v-for和v-if放一起在vue2中,v-for的优先级是高于v-if,把它们放在一起,输出的渲染函数中可以看出会先执行循环再判断条件,哪怕我们只渲染列表中一小部分元素...,也得在每次重渲染的时候遍历整个列表,这会比较浪费;另外需要注意的是在vue3中则完全相反,v-if的优先级高于v-for,所以v-if执行时,它调用的变量还不存在,就会导致异常通常有两种情况下导致我们这样做

    1.2K40

    vue 随记(3):“新时代”的姿势

    •setup: 它只是一个函数,它将属性和函数返回到模板。可在此声明所有的响应式属性、计算属性、观察者和生命周期钩子,然后返回它们,以便它们可以在模板中使用。...watchEffect 应该接收一个应用预期副作用 (这里即设置 innerHTML) 的函数。它会立即执行该函数,并将该执行过程中用到的所有响应式状态的 property 作为依赖进行追踪。...当你在组件中从 data() 返回一个对象,内部实质上通过调用 reactive() 使其变为响应式。而模板会被编译为渲染函数 ,因而可以使用这些响应式的 property。...你甚至可以同时混用它们——虽然作者承诺,options API现在以后都不会废弃。但是组合式api看起来更像是一种更面向未来的vue语法。...——https://composition-api.vuejs.org/zh/ 主要的改变在于:options API中诸如data/conputed/created等,到了都需要独立从vue对象中引入

    67110

    用 Typescript + Composition API 重构 Vue 3 组件

    原文:https://vuejs-course.com/blog/vuejs-3-typescript-options-composition-api Options API、Composition API...我们将看到一些不同之处,以及可能带来的益处。 同时因为这些既有组件拥有单元测试,我们也将观察这些测试在重构过程中是否仍有效、我们要不要改进它们。...至少经验告诉我们,如果只是进行不改变组件对外行为的单纯重构,是不用改变测试的;而如果需要的话,说明你的测试并不理想,它们关注了实现细节。 1. 既有组件 我们将重构 FilterPosts 组件。...鉴于 Vue Test Utils 和 Jest 尚无对 Vue.js 3 组件的官方支持,该组件使用了 render 函数编写。为照顾对其不太熟悉的读者,我将其对应的 HTML 写在了注释里。...总结 本文展示并讨论了: 渐进地向一个常规 JS 组件中添加类型 好的测试聚焦行为而非实现细节 TypeScript 的好处 Options API vs. Composition API 7.

    1.4K30

    Vue2.5 零基础开发去哪儿网实战(二) - 起步 Vue.js

    值得注意的是只有当实例被创建时 data 中存在的属性才是响应式的。也就是说如果你添加一个新的属性 比如: app.b = 'hi' 那么对 b 的改动将不会触发任何视图的更新。...除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法. 它们都有前缀 $,以便与用户定义的属性区分开来....、v-on) 3.1 列表渲染 3.1.1 用 v-for 把一个数组对应为一组元素 我们用 v-for 指令根据一组数组的选项列表进行渲染。... 块中,我们拥有对父作用域属性的完全访问权限. v-for 还支持一个可选的第二个参数为当前项的索引....它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理. v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源

    2.1K20

    Vue面试题-02

    前言 马上要秋招了,搜集整理了一些Vue面试题,包括组件、指令、API等相关内容,巩固基础秋招冲冲冲!!!...Vue 实例将会在实例化时调用$watch(),遍历 watch对象的每一个属性。 两者用于不同情况下完成计算,显示数据的操作。...它们的区别主要来源于用法,只是需要动态值,那就用计算属性;需要知道值的改变后执行业务逻辑,才用 watch,用反或混用虽然可行,但都是不正确的用法。...vue在官方文档中明确指出,永远不要把 v-if 和 v-for 同时用在同一个元素上 在 Vue 2 中,v-for 优先于 v-if 被解析,即先执行循环,后判断条件。...与v-if作用在不同标签时候,是先进行判断,再进行列表的渲染 注意 永远不要把 v-if 和 v-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断) 如果避免出现这种情况

    2.2K30

    vue自定义指令和IntersectionObserver接口,监听元素进入父元素视窗内的实际应用

    需求背景:一个每行3列的列表布局,列表中的每一项有一个已读/未读状态,只要展现在了用户的视窗内就算已读状态了。...除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件。...然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。...但是,有时我们除了对 dom 的操作外,还需要实现对 vue 页面 data 数据的修改、methods 里方法的调用,或者一些额外的参数需要传到指令里来进行判断的...这时我们就可以借助第二个参数 binding...guide/custom-directive.html MDN IntersectionObserver 接口:https://developer.mozilla.org/zh-CN/docs/Web/API

    54040

    10 个 Vue 开发技巧,助力成为更好的工程师!

    /v2/guide/events.html#内联处理器中的方法 https://cn.vuejs.org/v2/guide/components.html#使用事件抛出一个值 自定义组件双向绑定 组件...$emit('update', this.num++) } } } 文档:https://cn.vuejs.org/v2/api/#model 监听组件生命周期 通常我们监听组件生命周期会使用...因为它们会在页面销毁后程序化的自主清除。...文档:https://cn.vuejs.org/v2/guide/components-edge-cases.html#程序化的事件侦听器 手动挂载组件 在一些需求中,手动挂载组件能够让我们实现起来更加优雅...比如一个弹窗组件,最理想的用法是通过命令式调用,就像 elementUI 的 this.$message 。而不是在模板中通过状态切换,这种实现真的很糟糕。

    1.8K10
    领券