首页 > 其他分享 >057_末晨曦Vue技术_处理边界情况之强制更新和创建低开销的静态组件

057_末晨曦Vue技术_处理边界情况之强制更新和创建低开销的静态组件

时间:2022-08-29 09:57:25浏览次数:82  
标签:Vue obj name age 组件 强制 057 晨曦

强制更新和创建低开销的静态组件

点击打开视频讲解更加详细

强制更新

如果你发现你自己需要在 Vue 中做一次强制更新,99.9% 的情况,是你在某个地方做错了事。

你可能还没有留意到数组或对象的变更检测注意事项,或者你可能依赖了一个未被 Vue 的响应式系统追踪的状态。

然而,如果你已经做到了上述的事项仍然发现在极少数的情况下需要手动强制更新,那么你可以通过 $forceUpdate 来做这件事。

完整案例:

<template>
  <div id="app">
    name:<div>{{ obj.name }}</div>
    age:<div>{{ obj.age }}</div>

    <div v-for="(item,index) in list" :key="index">{{ item.name }} -- {{ item.age }}</div>

    <button @click="change">改变</button>
  </div>
</template>

<script>
export default {
  name: 'App',
  data(){
    return {
      // 对象
      obj :{
        name:'末晨曦吖'
      },
      // 数组
      list:[
        { name:'一笑而过' }
      ]
    } 
  },
  mounted() {
    
  },
  components:{
    
  },
  methods:{
    change(){
      // 对象
      // this.obj.age = 18
      // this.$forceUpdate()     // 第一种解决方式: this.$forceUpdate(); 强制刷新  同等效果的:window.location.reload()  不推荐
      // this.$set(this.obj,'age',18)   // 第二种解决方式 推荐使用

      // 数组
      // this.list[0].age = 18
      // this.$forceUpdate()
      this.$set(this.list[0],'age',18)
    }
  }
}
</script>

<style scoped>
 
</style>

通过 v-once 创建低开销的静态组件

渲染普通的 HTML 元素在 Vue 中是非常快速的,但有的时候你可能有一个组件,这个组件包含了大量静态内容。在这种情况下,你可以在根元素上添加 v-once attribute 以确保这些内容只计算一次然后缓存起来,就像这样:

Vue.component('terms-of-service', {
  template: `
    <div v-once>
      <h1>Terms of Service</h1>
      ... a lot of static content ...
    </div>
  `
})

再说一次,试着不要过度使用这个模式。当你需要渲染大量静态内容时,极少数的情况下它会给你带来便利,除非你非常留意渲染变慢了,不然它完全是没有必要的——再加上它在后期会带来很多困惑。例如,设想另一个开发者并不熟悉 v-once 或漏看了它在模板中,他们可能会花很多个小时去找出模板为什么无法正确更新。

若对您有帮助,请点击跳转到B站一键三连哦!感谢支持!!!

标签:Vue,obj,name,age,组件,强制,057,晨曦
From: https://www.cnblogs.com/mochenxiya/p/16634865.html

相关文章

  • echarts-散点图-vue3-内阴影
      以上为效果图但是有一个问题是,一开始需要定义位置和颜色数组,当数据量过多的时候会重叠而且要提前声明很多数据后面我决定用关系图来做了,先放上散点图代码供参考f......
  • vue中data为何一定是函数
    1、函数是以事件驱动的可重复调用的代码块,在组件复用时可以直接调用vue实例2、每次组件复用都会重新调用data函数,3、data在作为函数在数据调用时会return一个新对象使得......
  • vue属性、监听、事件、绑定、渲染(二)
    一、计算属性和监听器1、计算属性data中的属性可以通过声明获得,也可以通过在computed通过计算获得特性:计算属性所依赖的属性值发生变化会影响计算属性的值同时发生变......
  • vue3 基础-列表渲染
    本篇讲列表渲染,主要是对v-on指令配合v-if和一些数组相关的方法来体验vue的模板渲染方法.数组元素的渲染<!DOCTYPEhtml><htmllang="en"><head><title>列表......
  • vue3项目-小兔鲜儿笔记-03-首页模块02
    1.骨架效果目的:为了在加载过程中等待效果更好,封装骨架屏组件实现步骤:骨架屏组件需暴露的属性:高、宽、背景颜色,是否启用动画使用插件的方式进行全局注册<templa......
  • vue-实现倒计时功能
    模板<divid="app">{{`${day}天${hr}小时${min}分钟${sec}分钟`}}</div>数据data(){return{day:0,hr:0,min:0,sec:0......
  • Vue页面上实时显示当前时间,每秒更新
    有时候我们需要在页面上添加一个类似时钟的东西来实时显示当前时间,这个时候我们可以利用定时器来完成这个功能模板<divid="app">{{date}}</div>数据expo......
  • vue router
    使用vite创建项目npminitvitevscode配置jsconfig.json{"include":["./src/**/*"],"compilerOptions":{"baseUrl":".",......
  • vue——nextTick函数
    一.nextTick的作用Vue.nextTick作用是在下一次DOM更新结束后执行其指定的回调。。那么我们的理解是:当数据发生变化之后,DOM视图并不会立即更新,如果我们在发生变化之......
  • 消除Vue重复路由报错
    在VUE中路由遇到Error:Avoidedredundantnavigationtocurrentlocation:报错显示是路由重复在router文件夹下的index.js中加入如下代码,错误消失constoriginalPush......