iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue3通用API功能示例剖析
  • 219
分享到

Vue3通用API功能示例剖析

Vue3通用APIVue3 API功能 2023-05-18 17:05:20 219人浏览 泡泡鱼
摘要

目录通用apiversion (暴漏当前使用的Vue版本)nextTick (Dom更新完成后触发,用于获取更新后的Dom)defineComponent(类型推导的辅助函数, 让

通用API

version (暴漏当前使用的Vue版本)

import Vue from 'vue';
export default {
    setup(props, context) {
        console.log(Vue.version);
        return {};
    }
};

nextTick (Dom更新完成后触发,用于获取更新后的Dom)

当我们更改响应式state时,Vue更新DOM并不是同步实时更新的,而是将同步执行的所有state更新缓存起来,同步代码执行完后再去执行Dom更新操作,很大程度的优化render性能,减少了Dom更新次数;

而这一特性带来的一个问题,我们无法在state更改后获取到真实的Dom,所以Vue提供了nextTick来获取state更新后的Dom

function nextTick(callback?: () => void): Promise<void>

使用案例

<template>
    <div class="test_demo">
        <h2 class="text">{{ text }}</h2>
        <button @click="onBtnClick">更新</button>
    </div>
</template>
<script lang="ts" setup>
import { ref, nextTick } from 'vue';
const text = ref('test_0');
const onBtnClick = () => {
    text.value = 'test_1';
    nextTick(() => {
        const text = (
            document.querySelector<htmlElement>('.text') as HTMLElement
        ).innerText;
        console.log(text);
    });
    text.value = 'test_2';
};
</script>

点击更新按钮后,输出test_2。但是,如果注释掉text.value = 'test_1';,输出结果大不一样,输出test_0。

为什么会有这个问题?

text.value赋值操作是同步实时的,代码执行遇到响应式state的更改时,会提交一个视图更新逻辑到微任务队列,遇到nextTick,也会向微任务队列提交。 所以上述代码,视图更新逻辑nextTick前边,视图更新逻辑的执行是将text.value = 'test_1'text.value = 'test_2'合并后再更新视图,所以输出test2;

注释掉text.value = 'test_1'后,nextTick在微任务队列的顺序就在视图更新逻辑前边了,所以输出test_0。

defineComponent(类型推导的辅助函数, 让 TypeScript 正确地推导出组件选项内的类型)

如果你使用<script setup lang='ts'>语法,就需要使用definePropsTS推导出组件的Props

<script setup lang="ts">
// 启用了 TypeScript
import { ref } from 'vue'
const props = defineProps({ msg: String })
const count = ref(1)
</script>
<template>
  <!-- 启用了类型检查和自动补全 -->
  {{ count.toFixed(2) }}
</template>

如果没有使用setup语法,考虑使用defineComponent进行包裹,从而实现类型推导

import { defineComponent } from 'vue'
export default defineComponent({
  // 启用了类型推导
  props: {
    message: String
  },
  setup(props) {
    props.message // 类型:string | undefined
  }
})

如果项目webpack,需要注意下,defineComponent可能导致组件无法被tree shaking, 为了确保组件被安全tree shaking,需要我们开发时做一下处理

export default  defineComponent()

如果项目用Vite,不需要做任何处理,因为Vite底层的Rollup会智能的认为defineComponent没有副作用。

defineAsyncComponent (异步组件)

开发过程中,有一些场景例如:弹框内的表单、其它Tab下的组件等在页面初始化时不需要加载,我们可以考虑使用defineAsyncComponent来声明成异步组件,从而提高页面初始化的速度。

用法一(从服务器获取组件)

import { defineAsyncComponent } from 'vue';
const AsyncComp = defineAsyncComponent(() => {
    return new Promise((resolve, reject) => {
        // ...从服务器获取组件
        resolve();
    });
});

用法二(异步加载本地组件)

import { defineAsyncComponent } from 'vue';
const AsyncComp = defineAsyncComponent(
    () => import('./components/MyComponent.vue')
);

defineAsyncComponent其它参数配置

 const AsyncComp = defineAsyncComponent({
        // 加载函数
        loader: () => import('./Foo.vue'),
        // 加载异步组件时使用的组件
        loadinGComponent: LoadingComponent,
        // 展示加载组件前的延迟时间,默认为 200ms
        delay: 200,
        // 加载失败后展示的组件
        errorComponent: ErrorComponent,
        // 如果提供了一个 timeout 时间限制,并超时了
        // 也会显示这里配置的报错组件,默认值是:Infinity
        timeout: 3000
    });

Suspense

<Suspense> 是一个内置组件,用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成,并可以在等待时渲染一个加载状态。

虽然defineAsyncComponent具备loadingComponent参数来配置加载异步组件时的Loading组件,但是在一些场景,是需要使用Suspense来使用的。例如:A组件依赖了B、C、D,如果三个都是异步组件,加载的过程要显示3个Loading,而Suspense可以配置所有子组件存在未加载时而现实的Loading。

defineCustomElement (使用Vue组件开发Web Components)

关于Web Components的介绍请参考文章 Web Components入门

Vue 提供了一个和定义一般 Vue 组件几乎完全一致的defineCustomElement方法来支持创建自定义元素。

import { defineCustomElement } from 'vue';
const MyVueElement = defineCustomElement({
    
});
// 注册自定义元素
customElements.define('my-vue-element', MyVueElement);

以上就是vue3通用API功能示例剖析的详细内容,更多关于Vue3通用API剖析的资料请关注编程网其它相关文章!

--结束END--

本文标题: Vue3通用API功能示例剖析

本文链接: https://www.lsjlt.com/news/212312.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue3通用API功能示例剖析
    目录通用APIversion (暴漏当前使用的Vue版本)nextTick (Dom更新完成后触发,用于获取更新后的Dom)defineComponent(类型推导的辅助函数, 让 ...
    99+
    2023-05-18
    Vue3通用API Vue3 API功能
  • Vue3通用API功能怎么使用
    通用APIversion (暴漏当前使用的Vue版本)import Vue from 'vue'; export default { setup(props, context) { console.l...
    99+
    2023-05-14
    API Vue3
  • Vue3通用API功能如何使用
    这篇文章主要介绍了Vue3通用API功能如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3通用API功能如何使用文章都会有所收获,下面我们一起来看看吧。通用APIversion (暴漏当前使用的Vu...
    99+
    2023-07-06
  • Vue3中Composition API的使用示例
    这篇文章主要介绍Vue3中Composition API的使用示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vue3.0在7月发布了rc版本,vue-cli4.5后也支持选择vue3作为备选版本可以体验了,vue...
    99+
    2023-06-14
  • 剖析Vue实例:解锁其强大功能
    Vue.js 是一个流行的前端框架,它通过创建和管理 Vue 实例来构建交互式和动态的 Web 应用程序。Vue 实例是应用程序的核心,它管理数据、响应用户交互并渲染用户界面。 响应系统: Vue 实例的核心特征之一是其响应性。当实例中...
    99+
    2024-02-18
    Vue 实例 响应式 组件通信 数据绑定
  • TypeScript类型使用示例剖析
    目录JavaScript的内置类型 VS TypeScript内置类型元祖接口interfaceinterface和type有什么区别?枚举怎么让Babel支持const enum字...
    99+
    2023-05-18
    TypeScript类型剖析 TypeScript 类型示例
  • zlib库剖析(3):使用示例zpipe
    本文整理自http://zlib.net/zlib_how.html, 在源码包zlib-1.2.7的examples/zlib_how.html中也有。    我们常常疑惑不知道怎么样使用deflate()和inflate()。用户想知...
    99+
    2023-01-31
    示例 zlib zpipe
  • webpack实用小功能的示例分析
    这篇文章主要介绍webpack实用小功能的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!webpack比较实用的功能1.overlayoverlay属于devServer的属...
    99+
    2024-04-02
  • Python应用的功能的示例分析
    Python应用的功能的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python应用在计算机语言中被广泛的应用,其特点是语法比较清晰,在多种的操作系统中都可以使用...
    99+
    2023-06-17
  • Angular5.1新功能的示例分析
    这篇文章主要介绍Angular5.1新功能的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!新特性Angular Material和CDK稳定版CLI中支持Service Wo...
    99+
    2024-04-02
  • Fastjson常用API的示例分析
    这篇文章将为大家详细讲解有关Fastjson常用API的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Fastjson是一个Java语言编写的高性能功能完善的JSON库。将解析json的性能提升到...
    99+
    2023-05-30
    fastjson api
  • Vue3+axios+Mock.js实现登录功能的示例代码
    目录前言一、Vue3 + Element Plus + Mock.js + axios实现登录功能1.登录页面配置路由、编写表单内容2.编写表单校验规则3.登录触发表单预验证4.Mo...
    99+
    2023-05-19
    Vue3 axios Mock.js登录 Vue3 axios Mock.js
  • python中使用pandas功能的示例分析
    小编给大家分享一下python中使用pandas功能的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的五大特点是什么python的五大特点:1...
    99+
    2023-06-15
  • 在RHEL 5下通过Bind实现DNS功能的示例分析
    在RHEL 5下通过Bind实现DNS功能的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。DNS的作用及相关概念不属于本文讨论内容,只讲述如何通过RHEL 5.1的...
    99+
    2023-06-17
  • vue3 中computed 新用法的示例分析
    这篇文章给大家介绍vue3 中computed 新用法的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式AP...
    99+
    2023-06-21
  • nginx负载功能+nfs服务器功能的示例分析
    这篇文章主要介绍了nginx负载功能+nfs服务器功能的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用nfs服务器使3台server服务器网页内容一致#本文使用的...
    99+
    2023-06-29
  • React中并发功能的示例分析
    这篇文章将为大家详细讲解有关React中并发功能的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。React 是一个开源 JavaScript 库,开发人员使用它来创建基于 Web 和移动的应用程序...
    99+
    2023-06-20
  • Vue3 实现网页背景水印功能的示例代码
    经常有一些公司和组织出于系统文件或信息安全保密的需要,需要在系统网页上增加带有个人标识(系统账号或个人信息)的水印,可以简单防止截图外传 首先我们来看这样一个水印功能的实现思路,通...
    99+
    2022-11-13
    vue网页水印 vue网页背景水印
  • vue3使用自定义指令实现eldialog拖拽功能示例详解
    目录实现el-dialog的拖拽功能通过自定义指令实现拖拽功能实现拖拽功能使用方式实现el-dialog的拖拽功能 这里指的是 element-plus 的el-dialog组件,一...
    99+
    2024-04-02
  • Visual Studio 2010敏捷功能的示例分析
    这篇文章主要介绍Visual Studio 2010敏捷功能的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.概述一个软件产品或系统同任何事物一样,也要经历孕育、诞生、成长、成熟、衰亡等阶段,一般称为软件生...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作