关于vuesuspense的信息

本篇文章给大家谈谈vuesuspense,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

vue3.0新特性

使用es6 proxy 实现响应式,完美支持数组和对租贺象的改变响应式

生命周期名字替换: 更好的语义化帆型嫌

beforeDestory = beforeUnmount

destroyed = unmounted :销毁完毕

语法:

2.Suspense支持多个请态手求

[img]

Vue 3新引入的Suspense组件介绍

Suspense是Vue 3新增的内置标签,尽管目前官方文档里并没有Suspense的介绍,但不妨碍我们先学习它。

每当我们希望组件等待数据获取时(通常在异步API调用中),我们都可以使用Vue3 Composition API制作异步组件。

以下是异步组件有用的一些实例:

以前,在Vue 2中,我们必须使用条件(例如 v-if 或 v-else)来检查我们的数据是否已加载并显示后备内容。

但是现在,Suspense随Vue3内置了,因此我们不必担心跟踪何时加载数据并呈现相应的内容。

我们通过范例学习Suspense,首先编写一个父组件。

template里使用了Suspense标签,即便你世租燃完全不懂Suspense的用法,看了范例也该看明白,default插槽里要放正式内容,fallback插槽里要放降级内容,我放了一行字 Loading ... ,你也可以放菊花图搜虚之类的东西。

变量名asyncCom必须与模板里的组件名一致。defineAsyncComponent方法用来动态引入组件。

页面会显示1.5秒的Loading...,然后显示一个列表。

Vue从上到下执行子组件的setup里的全部语句,执行完同步语句(包括await语句)之后,父组件就认为子组件加载完成,在这之前,子组件setup状态始终未pending,所以父组件显示降级内容(Loading...),等子组件setup的状态变成resolved或者rejected,父组件就显示默认内容。

先说怎么显示异常:我的计划是,如果出现异常,就不再显示Loading...,而是显示“Loading Error. Retry?”,其中Retry做成一个按钮。

现在 ref: jsonData = await fetchData(); 这句根本没有考虑异常情况,那么怎么捕获异常呢?

我们型槐定义一个布尔值asyncComShow负责刷新组件,同时给async-com绑上事件@retry="retry"。retry函数要做的事情就是隐藏组件然后再显示,借此刷新组件。

首先编写错误提示,然后定义变量errorShow来切换提示。

const instance = getCurrentInstance();用于提供emit方法向父组件发出retry申请。也可以在顶层定义const context = useContext();,然后用context.emit("retry");,我建议用后者,因为标准且轻量级。

之后,我们用try...catch...来捕获错误。

最后,await getList()的await是必须要写的,不然setup生命期会在瞬间结束,Loading提示也只会显示一瞬间。

vue3.0有哪些新特性

vue3.0新特性有:

1、性能比vue2.x快1.2 2倍- Performance ;

2、支持tree-shaking- Tree shaking support ;

3、引入了Composition API- Composition API ;

4、暴露了自定义渲染API- Custom Renderer API ;

5、新增三个组件(Fragment、Teleport、Suspense);

6、 更好的支持迟亮TS - Better TypeScript support;

一、Performance

二、 Three-shaking support

Vue3.x中的核心API都支持tree-shaking,这些API都是通过包引入的方式而不是直接在实例化时就注入,只会对使用到的功能或特性进行打包(按需打包),这意味着更多的功能和更小的体积。

三、Composition API

Vue2.x中,我们通常采用mixin来复用逻辑代码,使用起来虽然方便,但也存在一些问题:代码来源不清晰、方法属性可能出现冲突。因此,Vue3.x引入了Composition API(组合API),使用纯函数分割复用代码。和React Hooks的概念相似。

四、 Fragment、Teleport、Suspense

Fragment

在书写Vue2.x时,由于组件必须是一个根结点,很多指旦知时候会添加一些没有意义的唯消节点用于包裹。Fragment组件就是用于解决这个问题的(这和React 中的Fragment组件是一样的)。

Teleport

Teleport其实就是React中的Portal。Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案。

五、API- Custom Renderer API

vue官方实现的 createApp 会给我们的 template 映射生成 html 代码,但是要是你不想渲染生成到 html ,而是要渲染生成到 canvas 之类的不是html的代码的时候,那就需要用到 Custom Renderer API 来定义自己的 render 渲染生成函数了。

Vue3 中使用 defineAsyncComponent 延迟加载组件

使用 Vue3 的 defineAsyncComponent 特性可以让我们延迟加载组件。这意味着它们仅在需要时从服务器加载。

这是一个改善初始页面加载的好方法和铅,因为我们的应用程序将以较小的块加载,而不必在页面加载时加载每个组件。

以下示例来自官网 异步组件 :

我们还可以使用 import 从其他文件轻松添加 Vue 组件。

这是使用 defineAsyncComponent 的最简单方法,但我们也可以传入一个完整的选项对象,该对象配置了几个更高级的参数。

一般默认就已足够。

我们简单的模拟请求文章数据的 ArticleList.vue 组件:

我们使用 defineAsyncComponent 延迟加载 组件,并使用 Suspense 元素包装这个组件:

默认情况下,我们使用 defineAsyncComponent 定义的所有组件都是可挂起的。

这意味着,如果组件敏桥的父链中桥棚猛存在 Suspense ,它将被视为该 Suspense 的异步依赖项。我们的组件加载、错误、延迟和超时选项将被忽略,而将由 Suspense 处理。

最终效果如下:

用户将看到 Loading...,然后在 1s 之后请求完数据后,展示完整的组件。

当创建包含数十个组件的大型项目时, defineAsyncComponent 可能非常有用。当我们使用延迟加载组件时,我们可以加快页面加载时间,改善用户体验,并最终提高应用程序的保留率和转换率。

vue3 基础概念 (含与 vue2.6 的对比)

计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生友局改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。

通常更好的做法是使用计算属性而不是枝激命令式的 watch 回调。

Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括: push() 、 pop() 、 shift() 、 unshift() 、 splice() 、 sort() 、 reverse()

同时绑定多个事件

不同于组件和 prop ,事件名不存在任何自动化的大小写转换。因为 HTML 是大小写不敏感的,因此推荐你始终使用 kebab-case 的事件名。

使用场景:由于 vue 有 $parent 属性可以让子组件访问父组件。但孙组件想要访问祖先组件就好搭让比较困难。通过 provide / inject 可以轻松实现跨级访问祖先组件的数据。

provide:Object | () = Object

inject:Arraystring | { [key: string]: string | Symbol | Object }

提示: provide 和 inject 绑定并不是可响应的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。

动态组件:

异步组件:

混入 mixin 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

将插槽内容传送至指定位置,接受一个 to 的属性,它接受一个 css query selector 作为参数,这就是代表要把这个组件渲染到哪个 dom 元素中

Suspense 组件用于在等待某个异步组件解析时显示后备内容。

AsyncShow.vue

index.vue

Vue3中的Suspense

在vue3中新加了一个组件叫Suspense/Suspense,其作用是当你在进行一个异步加载时,可以先提供一些静态组件作为显示内容,然后当异步加载好弊散完毕时再显示.

这是一个内置标签,不用引入直接使用就ok

根据插槽机制,来区分组件,#default插槽里面的内容就卜袭是你需要渲染的异步组件;#fallback就是你指定的加载中的静态组件。

需要注意的是友氏:AsyncComponent/组件需要返回一个Promise

总结

这种机制,在React中早已存在了,React.lazy和Suspense/Suspense组件也是实现类似的效果,只不过是语法不一样而已. import()函数会返回一个Promise

关于vuesuspense和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表