【Vue3从零开始-第三章】3-7 动态组件和异步组件

简介: 【Vue3从零开始-第三章】3-7 动态组件和异步组件

]UWOD(KIB9LJS9~S[T{QHM9.png


前言


上一篇的文章中,我们了解了vue组件中的插槽和具名插槽的方法,今天我们继续深入了解一下vue组件中的动态组件和异步组件


动态组件


在第二章的内容中,我们有了解过动态元素的使用方法,主要是通过v-ifv-show指令来判断一个DOM元素显示还是隐藏。


如果我们要做一个动态组件是不是也可以通过v-ifv-show指令来判断呢?


<script>
  const app = Vue.createApp({
    template: `
      <div>
        <input-item />
        <common-item />
      </div>
    `
  });
  app.component('input-item', {
    template: `
      <div>
        <input />
      </div>
    `
  })
  app.component('common-item', {
    template: `
      <div>
        Hello World
      </div>
    `
  })
  const vm = app.mount('#root');
</script>
复制代码


UX)~JI~[T7I8{_3H8U7PO00.png


首先我们会定义两个全局组件,在根组件中会使用这两个全局子组件,这时候页面上就会显示这两个子组件的内容了。如果想要动态化就可以在子组件标签上使用v-if或者v-show指令了。


const app = Vue.createApp({
    data(){
      return {
        currentItem: 'input-item'
      }
    },
    methods: {
      handleClick(){
        this.currentItem === 'input-item' ? this.currentItem = 'common-item' : this.currentItem = 'input-item'
      }
    },
    template: `
      <div>
        <input-item v-show="currentItem === 'input-item'" />
        <common-item v-show="currentItem === 'common-item'" />
        <button @click="handleClick">切换</button>
      </div>
    `
  });


B0K5)(UG]L]D[MT[{0O_Z]X.png


  • 父组件中调用子组件时,在子组件标签上添加v-show指令用来判断data中的数据值。


  • 通过父组件的切换按钮,来控制v-show指令中的值并判断组件的显示隐藏。




虽然v-show指令已经可以很好的处理动态组件了,但是在vue里面还有一种更简单的方法去处理这种动态组件。


const app = Vue.createApp({
    data() {
      return {
        currentItem: 'input-item'
      }
    },
    methods: {
      handleClick() {
        this.currentItem === 'input-item' ? this.currentItem = 'common-item' : this.currentItem = 'input-item'
      }
    },
    template: `
      <div>
        <component :is="currentItem" />
        <button @click="handleClick">切换</button>
      </div>
    `
  });
复制代码


B0K5)(UG]L]D[MT[{0O_Z]X.png


  • 父组件中将子组件标签移除,替换成component标签。


  • component标签中绑定一个is属性,属性值就是data中定义的数据值currentItem


  • 使用component标签来做动态组件的操作,会使代码更加精简。


动态组件:根据数据的变化,结合component标签来随时动态切换组件的显示


异步组件


不管是上面的动态组件代码,还是以前的组件通信代码,都是一个同步执行并渲染的过程,也就是当页面加载的时候,组件都会一起渲染出来。


如果想要对某些组件进行延迟渲染,就得用到异步组件了。


定义异步组件会用到vue里面的defineAsyncComponent方法,在这个方法里面可以定义一个Promise去异步执行一个组件代码。


<script>
  const app = Vue.createApp({
    template: `
      <div>
        <common-item />
        <async-common-item />
      </div>
    `
  });
  app.component('common-item', {
    template: `
      <div>
        Hello World
      </div>
    `
  })
  app.component('async-common-item', Vue.defineAsyncComponent(() => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({
          template: `
            <div>
              这里会延迟加载!
            </div>
          `
        })
      }, 5000)
    })
  }))
  const vm = app.mount('#root');
</script>
复制代码


_9W4U{3WB2OJILKI0GX87J1.png


  • common-item组件就是一个同步组件,会跟随页面一同被渲染出来。


  • async-common-item组件后面调用了Vue.defineAsyncComponent方法,在方法里面隔了5秒的时间去渲染这个组件。


异步组件:异步执行某些组件的逻辑。


总结


本篇文章主要讲了动态组件和异步组件的用法,在实际项目中,渲染同步组件会更多一些,异步组件相对运用的地方较少。但还是希望大家可以了解一下异步组件的用法,说不定某一天在项目中就碰到了。

相关文章
|
12天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
12天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
21天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
47 7
|
22天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
40 3
|
21天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
39 1
|
21天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
42 1
|
23天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
5天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
5天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
5天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)