vue2

104 阅读2分钟

1.keep-alive

作用:可以帮助我们缓存组件实例,而不是每次切换时重新渲染他们。
原理:当你将组件包裹在标签时,vue会为这个组件维护一个缓存。这个缓存保存了组件的状态(state)和DOM结构。当组件再次被激活时,vue不会重新执行组件的创建过程,而是直接从缓存中获取已有的组件实例,并将其插入到DOM中。 keep-alive会影响被包裹组件的生命周期钩子。当组件首次被创建并插入到DOM中时,会触发created和mounted钩子。但是当组件被缓存后,在被重新激活时,不会触发created和mounted钩子。同样的,当组件被缓存起来时,会触发deactived钩子。

<template>  
  <div>  
    <keep-alive>  
        <component :is="currentView"></component>  
    </keep-alive>  
   </div>  
</template>  

<script>  
  export default {  
    data() {  
        return {  
        currentView: 'Home'  
        }  
        },  
    components: {  
        Home: { /* home component definition */ },  
        About: { /* about component definition */ }  
        }  
  }  
</script>
  //  Home和About组件将被缓存,当currentView发生变化时,对应的组件将被激活或者停用

清除缓存 :有时可能遇到手动清除某个特定组件的缓存,或者清除所有组件的缓存。vue没有提供这样的api,可以通过改变一个条件来控制是否启动缓存,或者利用生命周期钩子,在适当的时候销毁组件已达到清除缓存的效果。

vue组件动态加载的方式

1.异步组件

1.1 vue允许将组件定义为异步组件,从而在需要时加载他们,这可以通过使用import()函数来实现,

const AsyncComponent = () => import('./components/MyComponent.vue');  
  
export default {  
  components: {  
    AsyncComponent  
  }  
}

1.2 使用defineAsyncComponent(vue3)

import { defineAsyncComponent } from 'vue';

const AsyncComponent = defineAsyncComponent(() => import('MyComponent.vue'));

export default {
  components: {
    AsyncComponent
  }
}`

1.3 预加载

异步组件还可以结合webpackchunkName提供命名,从而优化网络请求

    const AsyncComponent = () => import(/* webpackChunkName: "my-component" */ './components/MyComponent.vue');

2. 路由懒加载

在vue router中路由懒加载是常用的动态加载组件的方式。通过在路由定义中使用异步组件,可以实现按需加载。

const routes = [  
  {  
    path'/my-component',  
    component() => import('./components/MyComponent.vue')  
  }  
];

3. 动态组件

vue提供了标签,可以根据条件动态渲染组件。这种方式适合在运行时根据某些状态选择不同的组件

<template>  
  <component :is="currentComponent"></component>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      currentComponent'AsyncComponent'  
    };  
  },  
  components: {  
    AsyncComponent() => import('./components/MyComponent.vue'),  
    AnotherComponent() => import('./components/AnotherComponent.vue')  
  }  
}  
</script>

4. vue中数据改变后,组件不更新

4.1 确认响应式

确保数据是响应式数据。如果你是在vue实例中的data对象定义的数据,那么他们的数据是响应式的

4.2 检查异步更新队列

vue为了提高性能,在数据变化后会延迟更新DOM。可以使用$nextTick方法来获取最新的DOM

4.3 手动触发更新 $forceUpdate(慎用)
4.4 使用Vue.set或this.$set方法
    Vue.set(this.object, 'newProp', 123)  
    // 或者  
    this.$set(this.object, 'newProp', 123)