关于vuesuspense的信息
本篇文章给大家谈谈vuesuspense,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、vue3.0新特性
- 2、Vue 3新引入的Suspense组件介绍
- 3、vue3.0有哪些新特性
- 4、Vue3 中使用 defineAsyncComponent 延迟加载组件
- 5、vue3 基础概念 (含与 vue2.6 的对比)
- 6、Vue3中的Suspense
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和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。