$forceUpdate强制刷新

vue中$forceUpdate强制刷新的使用

$forceUpdate、v-if、key刷新介绍

1.$forceUpdate (只会触发beforeUpdate、updated)
  #作用:
  当在data中某个内容进行了改变、但是页面没有进行刷新、而控制台能进行打印证明数据确实改变了,此时就可以用来强制当前   组件刷新
  #常见场景:
  在v-for循环或者某个操作中对data中的内容进行增加、修改、或者删除操作,data中的数据确实改变了,而且打印的内容也改   变了,但是页面却没有刷新达到理想效果,这里则可以使用this.$forceUpdate()
  //另一种解决方式可以使用 Vue.$set()的方法替代直接取值赋值的方式进行数据上的设置与改变

// dataArray:[]
// carList:[]
for(var i=0; i<this.dataArray.length; i++){ 
  let flag = false; //默认没有选中
  for(var j=0; j<this.carList.length; j++){ //检测某个数组选项是否已中过
	  if(this.dataArray.code == this.carList[j].name){
	   flag = true;
	   break;
	  }
  }
  // 给数组的每个项的disabled都赋值要么是true,要么为false
  this.dataArray[i].disabled = flag;
 }
}
// 这种情况下有可能会导致代码执行完毕数据确实改变了,但是页面没刷新的情况。
// 因此需要下面的内容
this.$forceUpdate();

2.v-if通过变量控制的形式(在项目中比较少见),可以触发被控制的组件 beforeCreate、created、beforeMount、mountedbeforeDestroy、destroyed 这6个生命周期,关闭的时候子组件会触发beforeDestroy、destroyed两个生命周期 (父控制显隐对子组件刷新)
3.通过key属性来进行刷新操作(效果是最理想的),因为页面根本感觉不到组件的销毁与创建过程,确实满足了组件的刷新功能
  操作方式:在data中定义某个变量,然后将该变量放置在组件的key属性中,要实现该组件刷新时,只需改变变量的值即可

<template>
    <child ref="child1" :key='indexKey'></child>
</template>
<script>
import child from "./child";
export default {
 components: { child },
 data() {
    return {
      indexKey: 0  // 只需要通过操作如点击事件改变这个值,child子组件就会刷新,而且视觉上不会有变化
    };
  },
 }
</script>

注意:当key值改变的时候,child子组件实际上经历了新的child的创建过程以及旧的child的销毁过程
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只管挖坑不管埋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值