Vue工作流程及各类型对象API关系
Posted by Mars . Modified at
创建一个新的Vue app的整个流程,及各类型对象的API,和他们之间的交联关系梳理。
创建一个Vue app整体流程梳理
Vue模块中暴露的API有哪些?
这些API都可以从vue中直接导入获取。
import { <api> } from 'vue'
渲染
- createApp:传入根组件配置对象,创建应用实例,并返回创建的应用实例。
- createSSRApp:传入根组件,创建SSR应用实例。
- render:手动渲染VNode的函数。
- hydrate:用于SSR,将服务端渲染好的html中,用传入本地的剩余部分js为页面注水渲染。
SFC中CSS工具
应该很少使用到。
- useCssModule: 选择使用哪个CSS Module,传入一个字符串指定。默认是’$style‘
- useCssVars:
原生DOM组件
- Transition
- TransitionProps (TS接口)
- TransitionGroup
- TransitionGroupProps (TS接口)
版本号
- version: Vue版本号,目前是3.0.11
响应式API
@vue/reactivity
- 核心 Core
- reactive: 创建响应式对象 (__v_isReactive === true)
- ref: 创建响应式变量
- readonly: 创建只读对象 (__v_isReadonly === true)
- 小工具 Utilities
- unref: 把ref类型对象变回原始值 (返回ref.value),不是ref类型的原样返回
- proxyRefs:
- isRef:判断是否是ref类型
- toRef: 接受(object,key),将某一对象obj的某一key值变成Ref
- toRefs: 接受一个reactive对象,将其内部所有属性变成ref类型,从而可以对外解构赋值
- isReactive: 判断是否是reactive对象。如果传入一个只读对象,获取它的Raw原始值,继续判断是否是响应式对象。
- isReadonly: 判断是否是readonly对象 (ReactiveFlags.IS_READONLY === true)
- isProxy: 判断是否是经vue转换后的proxy。(是isReactive和isReadonly的或值)
- 高级 Advanced
- customRef: 创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。
- triggerRef:与shallowRef配合使用。因为shallowRef的内部值不是响应式的,这会导致包含它们的watch和computed无法响应它们的更新,这时可以通过trigger(shallowRef)进行手动触发。(一般也很少用吧。。- -||)
- shallowRef:创建浅ref。这种Ref只跟踪它内部这个value的变化,而这个value本身不会变成响应式的。例如:
let a = {}
let b = shallowRef(a)
a = {name: 'Mars'}
b.value // {name: 'Mars'}
isReactive(a) //false
- 高级 Advanced
- shallowReactive:与shallowRef同理,创建一个浅响应式对象,只响应这个对象本身的更新(单层转化),而对象自身内部不会变成响应式。
- shallowReadonly:创建一个既shallow又readonly的对象。
- markRaw:置一个reactive对象的__v_skip属性为true,也就是说它将永远不会变成响应式对象。
- toRaw:获取一个reactive对象的原始值。如果reactive是多层嵌套的,一直向内查询__v_raw属性,直到最内层非响应式的原始值。 (不是reactive对象类型,原样返回,包括ref类型)
计算和监听
- computed: 创建计算属性。传入一个函数(getter)或两个函数(getter和setter),函数内包含的所有reactive和ref响应式变量改变时,计算属性自动重新计算。
- watchEffect: 传入一个函数,立即运行,无需指定侦听的具体参数,然后自动跟踪其内部所有的响应式变量 —— 当任何一个响应式变量改变时立即重新运行函数。
- watch: 侦听器函数。传入两个参数,第一个是侦听的参数,第二个是回调函数(当侦听的参数变化时执行。)
生命周期钩子
这些都是在Setup中使用的钩子函数。
不多赘述。不熟悉的引用官网说明。
- onBeforeMount
- onMounted
- onBeforeUpdate
- onUpdated
- onBeforeUnmount
- onUnmounted
- onActivated: 被 keep-alive 缓存的组件激活时调用。
- onDeactivated: 被 keep-alive 缓存的组件停用时调用。
- onRenderTracked: 跟踪虚拟 DOM 重新渲染时调用。钩子接收 debugger event 作为参数。此事件告诉你哪个操作跟踪了组件以及该操作的目标对象和键。
- onRenderTriggered: 当虚拟 DOM 重新渲染被触发时调用。和 renderTracked 类似,接收 debugger event 作为参数。此事件告诉你是什么操作触发了重新渲染,以及该操作的目标对象和键。
- onErrorCaptured: 当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。
provide / inject
依赖注入,只能在Setup中使用。
- provide:传入两个参数,第一个是provide变量的名称,第二个是具体的值。
- provide的值可以是ref或reactive类型,在inject后依然保持响应性。
- 一般建议provide/inject的响应式值,只从provide的一方修改,inject一方只读取值不修改。(可以在provide的时候将变量变为readonly)
- inject: 可传入两个参数。第一个是接收的provide变量名称,第二个是可选参数,表示默认值。
nextTick
- nextTick: 传入一个回调函数,在下一个DOM更新周期执行。(用来防止修改响应式数据,DOM还没有更新,这时访问DOM中数据是旧数据的现象。)
组件、props、emit
- defineComponent:
- defineAsyncComponent:
- defineProps:
- defineEmit:
- useContext:
渲染、VNode相关
- h: 传入三个参数:type、props、children,返回创建的VNode对象。
- createVNode
- cloneVNode
- mergeProps
- isVNode
VNode的四种类型(均为Symbol类型变量):
- Fragment
- Text
- Comment
- Static
原生组件
- Teleport
- TeleportProps (TS interface)
- Suspense
- SuspenseProps (TS interface)
- KeepAlive
- KeepAliveProps (TS interface)
- BaseTransition
- BaseTransitionProps (TS interface)
指令相关
- withDirectives
服务端渲染相关
- useSSRContext
- ssrContextKey
自定义渲染器 API
- createRenderer
- createHydrationRenderer
- queuePostFlushCb
- warn
- handleError
- callWithErrorHandling
- callWithAsyncErrorHandling
- ErrorCodes
- resolveComponent
- resolveDirective
- resolveDynamicComponent
- registerRuntimeCompiler
- isRuntimeOnly
- useTransitionState
- resolveTransitionHooks
- setTransitionHooks
- getTransitionRawChildren
- initCustomFormatter
devTools相关
- devtools
- setDevtoolsHook
其他
- getCurrentInstance: 只能在setup中使用,用于获取当前组件实例。
Vue定义的TS类型
Vue中直接导出了所有重要的TS类型,供开发者使用。
- 响应式相关
- ReactiveEffect
- ReactiveEffectOptions
- DebuggerEvent
- TrackOpTypes
- TriggerOpTypes
- Ref
- ComputedRef
- WritableComputedRef
- UnwrapRef
- ShallowUnwrapRef
- WritableComputedOptions
- ToRefs
- DeepReadonly
- 侦听器相关
- WatchEffect
- WatchOptions
- WatchOptionsBase
- WatchCallback
- WatchSource
- WatchStopHandle
- 应用实例相关
- App
- AppConfig
- AppContext
- Plugin
- CreateAppFunction
- OptionMergeFunction
- VNode相关
- VNode
- VNodeChild
- VNodeTypes
- VNodeProps
- VNodeArrayChildren
- VNodeNormalizedChildren
- 组件相关
- Component
- ConcreteComponent
- FunctionalComponent
- ComponentInternalInstance
- SetupContext
- ComponentCustomProps
- AllowedComponentProps
- DefineComponent
- ComponentPublicInstance
- ComponentCustomProperties
- 组件配置项
- ComponentOptions
- ComponentOptionsMixin
- ComponentOptionsWithoutProps
- ComponentOptionsWithObjectProps
- ComponentOptionsWithArrayProps
- ComponentCustomOptions
- ComponentOptionsBase
- RenderFunction
- MethodOptions
- ComputedOptions
- AsyncComponentOptions
- AsyncComponentLoader
- emit相关
- EmitsOptions
- ObjectEmitsOptions
- 渲染器相关
- Renderer
- RendererNode
- RendererElement
- HydrationRenderer
- RendererOptions
- RootRenderFunction
- slot相关
- Slot
- Slots
- 指令相关
- Directive
- DirectiveBinding
- DirectiveHook
- ObjectDirective
- FunctionDirective
- DirectiveArguments
- InjectionKey
- HMRRuntime
- SuspenseBoundary
- TransitionState
- TransitionHooks