我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue修改数据页面不重新渲染问题如何解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue修改数据页面不重新渲染问题如何解决

本文小编为大家详细介绍“vue修改数据页面不重新渲染问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue修改数据页面不重新渲染问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

vue渲染机制和如何解决数据修改页面不刷新问题的多种方法

首先 第一点,vue底层是 将data对象传人,使用Object.definePropety,转换为getter和setter,所以,vue不支持IE8.

简单介绍一下Object.definePropety,

Object.defineProperty(obj, prop, descriptor)//参数obj要在其上定义属性的对象。prop要定义或修改的属性的名称。descriptor将被定义或修改的属性描述符
  var obj = {}  Object.defineProperty(obj, 'name', {    get: function() {      console.log('我的名字叫'+name);      return name;    },    set: function(value) {      console.log('你叫'+value)      name = value;    }  });    obj.name ='张三';//你叫张三    obj.name//我的名字叫张三

从上述我们可以简单发现。当我们对这个对象的name属性赋值的时候,就会触发set方法,获取name属性的时候就会触发get方法;

因此在vue中写在data中的属性是是可以转换成getter和setter,换一句话就是响应式的,其他定义在data之外的数据,是无法响应的渲染,意思就是改变数据页面也不会刷新,所以一切要渲染到页面上的数据,必须写在data中,

不需要的,可以定义在this上,

var vm = new Vue({  data:{    a:1  }})// `vm.a` 是响应式的vm.b = 2// `vm.b` 是非响应式的

简单介绍完了,我们来列举几个不刷新的实例当然上述也是一种

第一种:修改对象的某一属性

vue只会将已经在data中声明的属性变为响应,没有声明的是不响应的

<template>  <div>      <div v-for='item in list'>{{item}}</div>      <button @click='click'>改变</button>      <button @click='hadelClick'>解决方法</button>  </div></template><script>  export default({    data(){      return{        list:{a:'a',b:'b'},      }    },    methods: {          click() {          //  未声明不触发渲染           this.list.c='c'          },          hadelClick(){            // 解决方法,使用vue提供的$set方法来触发渲染            this.$set(this.list,'d','d')          }        }  })   </script>

当然如果我们要添加多个属性,可以使用 Object.assign() 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。(简单说就是合并到第一个参数中)

this.list = Object.assign({},this.list,{c:'c',d:'d'})

第二种:修改数组对象的某一属性

<template>  <div>      <div v-for='item in list'>{{item.a}}</div>      <button @click='click'>改变</button>      <button @click='hadelClick'>解决方法</button>  </div></template><script>  export default({    data(){      return{        list:[{a:'vue'},{a:'react'},{a:'js'}],      }    },    methods: {          click() {            //想这样直接给数组中的某一个对象直接赋值,是无法动态渲染的(即改变了数据,页面不渲染)            this.list[0] = {a:'css'} //页面不渲染            console.log(this.list)  //[{a:'css'},{a:'react'},{a:'js'}]          },          hadelClick(){            // 解决方法,使用vue提供的$set方法来触发渲染            this.$set(this.list[1],'a','css')            console.log(this.list)//[{a:'css'},{a:'css'},{a:'js'}]          }        }  })   </script>

当然前文讲过,vue会遍历data中的数据,将对象转换成setter和getter。所以数组中的也不例外,所以上述操作

改成:click(){this.list[0].a = css //依旧能够触发setter。实现数据重新渲染    }}

在vue中更多的是数组的操作不刷新,一种是通过索引赋值,一种是修改数组长度,如何解决呢?

vue官方也给了方法

数组的API,中能够改变原始数组的都能触发更新;

  • push()

  • pop()

  • shift()

  • unshift()

  • splice()

  • sort()

  • reverse()

第二种是返回一个新数组的,这种数组在引用地址上已经发生根本改变,这样的赋值操作是能触发更新的(这是处理不刷新的思路,就是改变引用地址,重新赋值触发更新)

简单说,用数组的API就是直接用原数组接收改变的数组,

  <template>  <div>      <div v-for='item in list'>{{item.a}}</div>      <button @click='click'>改变原数组</button>      <button @click='hadelClick'>不改变原数组</button>  </div></template><script>  export default({    data(){      return{       list:[{a:'vue'},{a:'react'},{a:'js'}],      }    },    methods: {          click() {           //改变数组刷新页面              this.list.push({a:'css'})          },          hadelClick(){        //重新赋值刷新页面                  this.list =  this.list.map(item=>{                  item.a = 'css'                  return item                })        }  })   </script>

最后提供解决思路(以上都搞不定的话)

对象和数组都是引用传递,要变成新数组,来接受,就需要改变源,

第一种

let arr = []//新数组this.list.forEach(item=>{  //需要渲染的数组    //执行你的操作,最后用放到arr中    arr.push(item)})this.list = arr //相当于返回一个新数组可以触发渲染

第二种

//想要直接改变渲染数组中的数据,但没有渲染//解决方法:let arr = this.list.slice(0);//深拷贝,(等价一个新的数组)arr.forEach(item=>{    //执行你的操作})//赋值操作this.list =  arr

上述如果都无法执行,但你的数据缺实修改了,可以使用this.$forceUpdate()方法 (强制刷新)

//this.$forceUpdate();//强制刷新<template>  <div>      <div v-for='item in list'>{{item.a}}</div>      <button @click='click'>改变</button>      <button @click='hadelClick'>解决方法</button>  </div></template><script>  export default({    data(){      return{        list:[{a:'vue'},{a:'react'},{a:'js'}],      }    },    methods: {          click() {            this.list[0] = {a:'css'} //页面不渲染            console.log(this.list)  //[{a:'css'},{a:'react'},{a:'js'}]          },          hadelClick(){            this.list[0] = {a:'css'} //页面不渲染            console.log(this.list)  //[{a:'css'},{a:'react'},{a:'js'}]              this.$forceUpdate();//强制刷新          }        }  })   </script>

读到这里,这篇“vue修改数据页面不重新渲染问题如何解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue修改数据页面不重新渲染问题如何解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

解决vue修改数据页面不重新渲染问题

这篇文章详细介绍了vue渲染机制和如何解决数据修改页面不刷新问题的多种方法,想了解更多的小伙伴可以借鉴阅读
2023-03-24

vue修改数据页面不重新渲染问题如何解决

本文小编为大家详细介绍“vue修改数据页面不重新渲染问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue修改数据页面不重新渲染问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。vue渲染机制
2023-07-05

如何解决uniapp拿到数据不渲染页面问题

在移动端应用开发中,uniapp以其跨平台特性和高效开发方式,越来越受到广大开发者的关注和青睐。但是,在使用uniapp开发应用时,有时候我们会遇到拿到数据但是无法渲染页面的情况。下面就让我们一起来看看这种情况的解决方法。一、检查数据格式uniapp可以使用vue.js的数据绑定技术来实现页面渲染,但是在使用数据绑定时,需要保证数据格式正确,否则无法渲染页面。比如,如果我们使用
2023-05-14

解决vue组件渲染没更新数据问题

本文主要介绍了解决vue组件渲染没更新数据问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-09

如何通过php函数解决页面渲染慢的问题?

在开发网页应用的过程中,页面渲染慢是一个常见的问题。用户访问一个网页时,如果页面渲染时间过长,可能会导致用户的不耐烦,甚至放弃访问。因此,加快页面渲染速度对于提高用户体验和页面性能至关重要。PHP 是一种广泛使用的服务器端编程语言,它拥有丰
2023-10-21

如何解决Vue路由this.route.push跳转页面不刷新的问题

这篇文章主要讲解了“如何解决Vue路由this.route.push跳转页面不刷新的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决Vue路由this.route.push跳转页面
2023-06-20

vue数据变化但页面刷新问题怎么解决

今天小编给大家分享一下vue数据变化但页面刷新问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。vue数据变化但页面
2023-06-30

vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法

VueRouter嵌套路由在History模式下刷新无法渲染页面的解决方法:使用Vuex管理路由状态:在store中保存路由路径,刷新后恢复它。使用HTML5HistoryAPI:用pushState()更新URL哈希,刷新后使用window.location.hash获取更新后的哈希。使用VueRouter的keepAlive:缓存嵌套组件实例,防止刷新后销毁。示例:使用Vuex管理路由状态的方法。
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2024-04-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录