异步组件
基础版本:
使用动态组件component + 动态加载import
高阶版本:
使用工厂函数:
可以操作细节,在异步请求过程中增加更多操作
import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent({
// 工厂函数
loader: () => import('./Foo.vue'),
// 加载异步组件时要使用的组件,需要另行创建和导入
loadingComponent: LoadingComponent,
// 加载失败时要使用的组件,需要另行创建和导入
errorComponent: ErrorComponent,
// 在显示 loadingComponent 之前的延迟 | 默认值:200(单位 ms)
delay: 200,
// 如果提供了 timeout ,并且加载组件的时间超过了设定值,将显示错误组件
// 默认值:Infinity(即永不超时,单位 ms)
timeout: 3000,
})
//之后再把 AsyncComp 放入 component选项中即可
mixin混入
自定义指令directives
根据程序复杂性使用,高度复用组件,主要针对视图渲染更新
export default {
bind(el,binding,vnode){
//绑定的时候
const valueOpt = binding.value
const
},
update(el,binding,vnode){
//更新的时候
}
}
//el是DOM元素,常用于获取对应DOM
//binding放配置,常取binding.value
//全局注册directives
app.directive('xxx', xxx);
//组件使用:v-xxx
filter过滤器
class绑定style数组写法结合对象
<div :class ="['默认class', {'激活class': index === curIndex}]"
ref和reactive异同
- ref 接收内部值(inner value)返回响应式 Ref对象,reactive 返回响应式代理对象
- 两者均用于构造响应式数据,ref通常用于处理原始值的响应式,reactive 用于处理对象类型的响应式数据
- ref 返回的响应式数据在js中使用需要加上.value才能访问其值,在视图中使用会自动脱ref,不需要.value,ref可以接收对象或数组等非原始值,但内部依然是reactive实现响应式,
- reactive内部如果接收Ref对象会自动脱ref,但使用展开运算符…展开reactive返回的响应式对象会使其失去响应性,可以结合toRefs()将值转换为Ref对象之后再展开
- reactive 内部使用Proxy代理传入对象并拦截该对象各种操作,从而实现响应式。ref内部封装一个RefImpl类,并设置get value /set value ,拦截用户对值的访问,从而实现响应式