vue中data的数组怎么操作会重新渲染页面,怎么操作不会渲染页面

这篇具有很好参考价值的文章主要介绍了vue中data的数组怎么操作会重新渲染页面,怎么操作不会渲染页面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

会渲染页面的操作

这是为什么呢

不会导致页面渲染的操作

 通过索引值改变数组导致页面不渲染的解决方法

this.$set的实现原理


会渲染页面的操作

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()
  • vue2.0还增加个方法可以观测Vue.set(items, indexOfItem, newValue)
  • Vue.set()的用法
  • filter(), concat(), slice() 。这些不会改变原始数组,但总是返回一个新数组。当用这个新数组替换老数组时同样会导致页面更新

这是为什么呢

vue2对于数组中的这些原型对象上的方法进行了重新的封装,对于数组调用这些方法都会使用dep.notify()通知视图更新。并且如果方法是push、unshift和splice则会对插入的数据再次进行观测

不会导致页面渲染的操作

  • 利用索引值直接改变一个值时,例如:this.arr[0] = 100。此时data中的arr[0]会变成100,但是不会渲染到页面上
  • 当你修改数组的长度时,例如: this.arr.length = 100

 注意注意:
arr=[{a:1},2]
arr[0].a = 100
这个时候会触发页面重新渲染,因为{a:1}是通过对象的方式进行的数据劫持,也就是说{a:1}有observer文章来源地址https://www.toymoban.com/news/detail-795378.html

 通过索引值改变数组导致页面不渲染的解决方法

	this.$set(this.arr, 0, 100)

this.$set的实现原理

  • 如果目标是数组,直接使用数组的 splice 方法触发相应式;
  • 如果目标是对象,会先判读属性是否存在、对象是否是响应式,最终如果要对属性进行响应式处理,则是通过调用 defineReactive 方法进行响应式处理( defineReactive 方法就是 Vue 在初始化对象时,给对象属性采用 Object.defineProperty 动态添加 getter 和 setter 的功能所调用的方法)

到了这里,关于vue中data的数组怎么操作会重新渲染页面,怎么操作不会渲染页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue组件中重新渲染的3种方式

    这个是最推荐的。因为vue是通过虚拟Dom算法来判断元素的变化,是否变化的核心是通过判断新旧元素的key值是否变化。如果你的key是变化的,则重新渲染该元素,如果key没变,则不会重新渲染。 所以如果你想让你的组件重新渲染,你给组件加上 key 属性,然后在需要重新渲染

    2024年02月12日
    浏览(37)
  • Angular 我在点击了上一页或者下一页方法之后,重新加载渲染数据。为什么还需要再点击一次页面的其他地方才会渲染出来?

    在你的 TypeScript 代码中,当调用 nextPage_TopSelling() 或 prevPage_TopSelling() 方法时,虽然你更新了 currentPage_TopSelling 的值并调用了 reloadTopSelling() 方法,但是 Angular 并不会自动检测到这些变化并重新渲染页面。这是因为 Angular 的变化检测机制是基于异步的,在一些情况下需要手动触

    2024年03月12日
    浏览(53)
  • vue 解决el-table 表体数据发生变化时,未重新渲染问题

     父组件中数量改变后总数重新计算 父组件代码  WmsTable 是子组件名  WmsTable 中的数量字段quantity修改时重新计算合计

    2024年01月20日
    浏览(37)
  • Vue强制刷新页面重新加载数据方法

    业务场景 在管理后台执行完增删改查的操作之后,需要重新加载页面刷新数据以便页面数据的更新 实现原理 就是通过控制router-view 的显示与隐藏,来重渲染路由区域,重而达到页面刷新的效果,show - flase - show 具体代码 1.首先在我们的根组件APP.vue里面,写入刷新方法,路由初

    2024年02月11日
    浏览(45)
  • 关于vue路由跳转后的页面不会刷新的解决办法

    做uni项目的时候遇到的情况:1,父组件页面刷新了之后 需要触底加载的子组件能触底加载,否则不能加载。2,子组件不能触底加载,只需要刷新之后就能触底加载。以上的刷新不包括下拉刷新。3. 可能因为包了一层tab页导致跳转进页面没有请求数据的问题。 我的解决办法是

    2024年02月11日
    浏览(63)
  • 清除引入js缓存,vue切换页面重新加载

    require引入的js require.cache删除js缓存

    2024年02月16日
    浏览(48)
  • Vue 页面渲染的流程

    在  Vue  核心中除了响应式原理外,视图渲染也是重中之重。我们都知道每次更新数据,都会走视图渲染的逻辑,而这当中牵扯的逻辑也是十分繁琐。 本文主要解析的是初始化视图渲染流程,你将会了解到从挂载组件开始, Vue  是如何构建  VNode ,又是如何将  VNode  转为真

    2024年02月08日
    浏览(37)
  • vue 渲染数组,拖拽排序,渲染同一个数组拖拽排序不影响其他选中行状态

    当我们能够设置单行状态改变的时候,那么肯定可以拿到选中的当前行的id或者下标index。 只要设定一个初始化值在拖拽开始的时候重新赋值,然后再处理选中状态的时候进行判断即可。 前期写的时候没有注意到这个问题,可以看这个文章。 在复测的时候发现了,当我改变任

    2024年01月16日
    浏览(62)
  • vue3 中reative 值为数组时如何重新赋值

    采用这种方式const tableData = reactive([]);定义的时候,不能直接赋值,这样的话就不能响应。需要利用push的方式。 const tableDataObj = reactive({listobj:[]}); 这中定义的可以直接赋值即可   参考 Vue3实践指南:使用reactive函数声明数组如何正确赋值响应式、script setup语法糖中toRefs如何优

    2024年02月10日
    浏览(33)
  • 将发布的h5页面转换成微信小程序,无需重新开发,操作超级简单!

    使用到的技术为 uniapp 和 web-view 首先,我们先来了解一下web-view是什么: 简单的一句话来讲: web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。 web-view的各类属性值: 第一步:使用HBuilder创建一个uniapp项目,没有

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包