网络编程
位置:首页>> 网络编程>> JavaScript>> Vue中$forceUpdate()的使用方式

Vue中$forceUpdate()的使用方式

作者:爱吃的前端程序员  发布时间:2024-06-05 09:15:53 

标签:Vue,$forceUpdate

$forceUpdate()的使用

在Vue官方文档中指出,$forceUpdate具有强制刷新的作用。

Vue中$forceUpdate()的使用方式

那在vue框架中,如果data中有一个变量:age,修改他,页面会自动更新。

但如果data中的变量为数组或对象,我们直接去给某个对象或数组添加属性,页面是识别不到的

<template>
 <p>{{userInfo.name}}</p>
 <button @click="updateName">修改userInfo</button>
</template>
<script>
 data(){
   return{
     userInfo:{name:'小明'}
   }
 },
 methods:{
   updateName(){
     this.userInfo.name='小红'
   }
 }
</script>

在updateName函数中,我们尝试给userInfo对象修改值,发现页面其实并没有变化

有两种解决方法 

方法一

methods:{
 updateName(){
   this.userInfo.name='小红'//在此时,确实已经将userInfo对象修改完成
   console.log(this.userInfo.name);//输出结果: 小红
   this.$forceUpdate();//在这里,强制刷新之后,页面的结果变为'小红'
 }
}

方法二

methods:{
 updateName(){
   this.$set('userInfo',name,'小红');
 }
}

关于$forceUpdate的一些理解

在官方文档上仅仅有这一句话

迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

我的理解是,所谓重新渲染,仅仅是指重新渲染DOM并与原有的DOM做code diff。对于有变更的,渲染到页面。结合官方解释,可以确认有两点不会发生:

  • 不会重新触发生命周期钩子函数,比如mounted

  • 不会渲染子组件的更新,即使子组件的props发生改变了。

既然如此,什么场景下会需要使用呢?

我们知道,在Vue中,响应数据发生改变后,会自动触发更新,但有一些条件,不会触发更新,比如数组的一些方法,或者添加data中并未提前定义的响应式数据。

举个例子:

假设有一个列表需要渲染,我们在data中初始化了这个列表,并在mounted函数中通过fill去填充这个数组。fill这个api是不会触发自动更新的。

<template>
  <div class="hello">
    <div>
      <span v-for="(item, index) in arr" :key="index">{{ item }}</span>
    </div>
    <hello-world ref="hello" :list="arr" />
  </div>
</template>
<script>
import HelloWorld from "@/components/HelloWorld.vue";
export default {
  name: "About",
  components: {
    HelloWorld,
  },
  data() {
    return {
      arr: Array(4),
    };
  },
  mounted() {
    this.arr.fill(0);
    setTimeout(() => {
      this.$forceUpdate();
    }, 3000);
    setTimeout(() => {
      this.$refs.hello.$forceUpdate();;
    }, 5000);
  },

在上面的示例中,页面会在3秒后才看到更新,子组件会在5秒后看到更新。这也就解释了forceUpdate的含义。

即强制更新因某些原因并未渲染到页面的,已经改变的,应该被渲染到页面的数据。

他所影响的仅仅是【触发render函数生成DOM -> 与原DOM 进行diff -> 更新视图】这个过程。 

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

来源:https://blog.csdn.net/y521123y/article/details/106257818

0
投稿

猜你喜欢

  • 我们常常看到一个这样的表达式 A=lambda x:x+1可能会一头雾水不知道怎么计算 最基本的理解就是def A(x):retu
  • 一、什么是匿名函数?在Javascript定义一个函数一般有如下三种方式:函数关键字(function)语句:function f
  • 所以爱微网现在讲解先php内置函数 有大小写转换相关函数 文本html标签处理函数大小写有关函数 strtolower() strtoupp
  • 本文实例讲述了Python基于numpy灵活定义神经网络结构的方法。分享给大家供大家参考,具体如下:用numpy可以灵活定义神经网络结构,还
  • 前言在日常开发中,我们经常需要判断目标元素是否在视窗之内或者和视窗的距离小于一个值(例如 100 px),从而实现一些常用的功能,例如:图片
  • 本文实例讲述了python提取内容关键词的方法。分享给大家供大家参考。具体分析如下:一个非常高效的提取内容关键词的python代码,这段代码
  • 双指数函数待拟合曲线为 y(x) = bepx + ceqximport matplotlib.pyplot as pltx = ([0.0
  • 本文分析了MySQL中字符串索引对update的影响。分享给大家供大家参考,具体如下:对某一个类型为varchar的字段添加前缀索引后,基于
  • 软硬件环境OS X EI CapitanPython 3.5.1mysql 5.6前言在开发中经常涉及到数据库的使用,而python对于数据
  • Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节char 对英文(ASCII)字符占用1个字节,对一个
  • 前言URLconf 就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。你就
  • 根据Nicholas的说法,有四种代码会拖慢脚本的运行,并最终导致脚本失控。分别是次数过多的同步循环、庞大的函数体、不恰当的递归和不合理的D
  • HMAC 算法可用于验证在应用程序之间传递或存储在潜在易受攻击位置的信息的完整性。基本思想是生成与共享密钥组合的实际数据的加密散列。然后,可
  • 背景:现如今不管什么服务和应用基本都可以在docker里跑一跑了,但是在我个人的印象中,像数据库这种比较重要大型且数据容易受伤的应用是不适合
  • 项目涉及的数据库表并不多,但每个select、insert、update和delete都去手动拼接字符串,是很低效的,尤其在时常要修改结构的
  • 安装anaconda登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网点击下载跳转
  • 你知道吗?实际上Python早在20世纪90年代初就已经诞生,可是火爆时间却并不长,就小编本人来说,也是前几年才了解到它。据统计,目前Pyt
  • asp之字符串函数示例用字符串函数对字符串进行截头去尾、大小写替换等操作。函数语 * 能LenLen(string|varname)返回字符串
  • 本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:一、装饰器是什么python的装饰器本质上是一个Python函数,它可
  • vm.$watch用法: vm.$watch( expOrFn, callback, [options] ) ,返回值为 unwatch 是
手机版 网络编程 asp之家 www.aspxhome.com