vue更新数据却不渲染页面的解决

 更新时间:2022年08月12日 10:07:30   作者:自信酷  
这篇文章主要介绍了vue更新数据却不渲染页面的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue更新数据却不渲染页面

1.Vue不能检测通过数组索引直接修改一个数组项

原因:由于JavaScript的限制,Vue不能检测数组和对象的变化

解决办法:

this.$set(arr,index,newVal)

2.选择功能选中时赋值了,但没渲染页面

场景:

 

点击这个没有显示“√”

解决办法:

checkClick (item) {
    item.check =! item.check;
    this.$forceUpdate() 
},

听说循环数据更新的层级太深,导致数据不更新,从而导致视图不更新,用上面可以解决,但我没遇到过这种情况,请查看Vue.js官方

3.路由参数变化时

页面不更新,本质上就是数据没有更新

原因:路由视图组件引用了相同组件时,当路由参数变化时,会导致该组件无法更新。

解决办法:

通过watch监听$route的变化

watch: {
    '$route': function() {
 
     }
}

4.在异步更新执行之前操作DOM数据不会变化

原因:Vue在更新DOM时是异步执行。

只要侦听到数据变化,Vue将开启一个队列,并缓冲在同一个事件循环中发生的所有数据变更。

如果同一个 watcher 被多次触发,只会被推入到队列中一次。

这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。

然后,在下一个的事件循环“nextTick”中,Vue 刷新队列并执行实际 (已去重的) 工作。

解决办法:

this.$nextTick(function(){ })

5.获取后台返回的数组进行排序处理了,页面内容却不排序

 原因:显示的元素不会动

解决办法:

使用v-if先隐藏元素,更新的数组排序处理好了,才显示元素

vue页面的渲染过程

首先vue会找到webpack的打包配置文件。在build/webpack.base.conf.js下:在这里,定义了vue的程序入口文件

vue加载时文件的执行顺序

  • 执行index.html文件
  • 执行main.js文件
  • main.js挂载了app.vue文件,用app.vue的templete替换index.html中的
  • main.js中注入了路由文件,将对应的组件渲染到router-view中
  • router-view中加载Layout文件
  • Layout 加载Navbar, Sidebar, AppMain

vue内部页面的执行顺序

Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML。但是模板毕竟是模板,不是真实的dom节点。从模板到真实dom节点还需要经过一些步骤

  • 把模板编译为render函数
  • 实例进行挂载, 根据根节点render函数的调用,递归的生成虚拟dom
  • 对比虚拟dom,渲染到真实dom

组件内部data发生变化,组件和子组件引用data作为props重新调用render函数,生成虚拟dom, 返回到步骤3

一. 模板到render

// App.vue 
<template>
    <div>
        hello word
    </div>
</template>
<script>
export default {
}
</script>
<style>
</style>

vue中各选项及钩子函数执行顺序

在页面首次加载执行顺序有如下:

  • beforeCreate //在实例初始化之后、创建之前执行
  • created //实例创建后执行
  • beforeMounted //在挂载开始之前调用
  • filters //挂载前加载过滤器
  • computed //计算属性
  • directives-bind //只调用一次,在指令第一次绑定到元素时调用
  • directives-inserted //被绑定元素插入父节点时调用
  • activated //keek-alive组件被激活时调用,则在keep-alive包裹的嵌套的子组件中触发
  • mounted //挂载完成后调用
  • {{}} //mustache表达式渲染页面

修改页面input时,被自动调用的选项顺序如下:

  • watch //首先先监听到了改变事件
  • filters //过滤器没有添加在该input元素上,但是也被调用了
  • beforeUpdate //数据更新时调用,发生在虚拟dom打补丁前
  • directived-update //指令所在的组件的vNode更新时调用,但可能发生在其子vNode更新前
  • directives-componentUpdated //指令所在的组件的vNode及其子组件的vNode全部更新后调用updated //组件dom已经更新

组件销毁时,执行顺序如下:

  • beforeDestroy //实例销毁之前调用
  • directives-unbind //指令与元素解绑时调用,只调用一次
  • deactivated //keep-alive组件停用时调用
  • destroyed //实例销毁之后调用

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vite的搭建与使用的详细步骤

    vite的搭建与使用的详细步骤

    本文主要介绍了vite的搭建与使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • vue.js使用v-model指令实现的数据双向绑定功能示例

    vue.js使用v-model指令实现的数据双向绑定功能示例

    这篇文章主要介绍了vue.js使用v-model指令实现的数据双向绑定功能,简单分析了v-model指令的功能并结合实例形式给出了v-model指令实现数据双向绑定相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Vue.js中用v-bind绑定class的注意事项

    Vue.js中用v-bind绑定class的注意事项

    关于数据绑定一个常见需求就是操作元素的class列表和它的内联样式。因为它们都是属性,我们可以用 v-bind 处理它们,但是使用v-bind绑定class的时候我们要有一些注意事项,下面这篇文章就给大家分享了下要注意的方面,希望能对大家有所帮助,下面来一起看看吧。
    2016-12-12
  • vscode中Vue别名路径提示的实现

    vscode中Vue别名路径提示的实现

    这篇文章主要介绍了vscode中Vue别名路径提示的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • vue组件中props与data的结合使用方式

    vue组件中props与data的结合使用方式

    这篇文章主要介绍了vue组件中props与data的结合使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue 按需引入vant跟全局引入方式

    vue 按需引入vant跟全局引入方式

    这篇文章主要介绍了vue 按需引入vant跟全局引入方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • element基于el-form智能的FormSmart表单组件

    element基于el-form智能的FormSmart表单组件

    本文主要介绍了element基于el-form智能的FormSmart表单组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 详解在vue中如何实现屏幕录制与直播推流功能

    详解在vue中如何实现屏幕录制与直播推流功能

    屏幕录制和直播推流是现代Web应用中常用的功能,Vue作为一种流行的JavaScript框架,提供了一些工具和库,可以方便地实现屏幕录制和直播推流功能,本文将介绍如何在Vue中进行屏幕录制和直播推流,需要的朋友可以参考下
    2024-01-01
  • vue 计时器组件的实现代码

    vue 计时器组件的实现代码

    本篇文章主要介绍了vue 计时器组件的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • vue路由的配置和页面切换详解

    vue路由的配置和页面切换详解

    这篇文章主要给大家介绍了关于vue路由的配置和页面切换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论