当前位置: 首页 > news >正文

数据录入网站开发郑州计算机培训机构哪个最好

数据录入网站开发,郑州计算机培训机构哪个最好,公司网站开发费用兴田德润官方网站,wordpress 特色图像前言 上一篇文章介绍了vue/composition-api是什么,以及为什么要用,现在来系统地解析一下 vue/composition-api 的实现原理,希望可以加深对其工作机制的理解。 老规矩先分享下AI评价:对vue/composition-api实现原理的介绍整体上非…

前言

上一篇文章介绍了@vue/composition-api是什么,以及为什么要用,现在来系统地解析一下 @vue/composition-api 的实现原理,希望可以加深对其工作机制的理解。

老规矩先分享下AI评价:对@vue/composition-api实现原理的介绍整体上非常详细和准确,展示了核心代码以及关键逻辑,这为理解其工作机制提供了很好的分析。

核心代码分析

install

引入@vue/composition-api时,需要手动通过Vue.use(),来调用该插件的install,所以我们看看安装时到底做了什么:


export function install(Vue: VueConstructor) {setVueConstructor(Vue)mixin(Vue)
}

这里最重要的其实是mixin函数,定义了在beforeCreate钩子中去执行初始化,
构建props和上下文ctx对象,执行setup函数:

export function mixin(Vue: VueConstructor) {Vue.mixin({beforeCreate: functionApiInit,mounted(this: ComponentInstance) {afterRender(this)},beforeUpdate() {updateVmAttrs(this as ComponentInstance)},updated(this: ComponentInstance) {afterRender(this)},})function functionApiInit(this: ComponentInstance) {const vm = thisconst $options = vm.$optionsconst { setup, render } = $optionsconst { data } = $options// wrapper the data option, so we can invoke setup before data get resolved$options.data = function wrappedData() {// 在data周期时,进行setup函数的执行initSetup(vm, vm.$props)return data || {}}}function initSetup(vm: ComponentInstance, props: Record<any, any> = {}) {const setup = vm.$options.setup!// 构造ctx对象,有以下key:// slots: 组件的插槽,默认为 {}// root: 组件的根实例// parent: 组件的父实例// refs: 组件的 ref 引用// listeners: 组件的事件监听器// isServer: 是否是服务端渲染// ssrContext: 服务端渲染的上下文// emit: 组件的自定义事件触发函数const ctx = createSetupContext(vm)const instance = toVue3ComponentInstance(vm)instance.setupContext = ctx// 通过Vue.observable对props进行响应式监听def(props, '__ob__', createObserver())}
}

ref

ref函数可以把一个普通的值转成响应式的数据。它返回一个可变的ref对象,对象上挂载了一个.value属性,我们可以通过这个.value属性读取或者修改ref的值。

其本质还是基于reactive来实现的响应式,只不过做了一个前置的get、set封装,源码如下:

export function ref(raw?: unknown) {// ref的本质其实还是调用的reactive// 然后通过 get/set 方法操作这个对象的值来实现对 ref 值的跟踪和响应const value = reactive({ [RefKey]: raw })return createRef({get: () => value[RefKey] as any,set: (v) => ((value[RefKey] as any) = v),})
}

createRef最后还是基于Object.defineProperty:

export function proxy(target: any,key: string,{ get, set }: { get?: Function; set?: Function }
) {Object.defineProperty(target, key, {enumerable: true,configurable: true,get: get || noopFn,set: set || noopFn,})
}

reactive

底层基于Vue.observable来建立响应式监听,Vue.observable 在 Vue2 和 Vue3 中的实现方式有所区别而已:

export function reactive<T extends object>(obj: T): UnwrapRef<T> {// 基于Vue.observableconst observed = observe(obj)setupAccessControl(observed)return observed as UnwrapRef<T>
}

computed

computed函数用来创建一个计算属性,它根据依赖进行缓存和懒执行。

构建get、set函数,通过vue的Watcher对象,进行监听绑定。

export function computed<T>(getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>
): ComputedRef<T> | WritableComputedRef<T> {const vm = getCurrentScopeVM()let getter: ComputedGetter<T>let setter: ComputedSetter<T> | undefinedgetter = getterOrOptions.getsetter = getterOrOptions.setlet computedSetterlet computedGetterconst { Watcher, Dep } = getVueInternalClasses()let watcher: anycomputedGetter = () => {if (!watcher) {watcher = new Watcher(vm, getter, noopFn, { lazy: true })}if (watcher.dirty) {watcher.evaluate()}if (Dep.target) {watcher.depend()}return watcher.value}computedSetter = (v: T) => {if (setter) {setter(v)}}return createRef<T>({get: computedGetter,set: computedSetter,},!setter,true) as WritableComputedRef<T> | ComputedRef<T>
}

watch

watch函数用于侦听特定的数据源,并在回调函数中执行副作用。

底层是通过Vue.$watch来实现的:

// 底层是通过Vue.$watch来实现
function createVueWatcher(vm: ComponentInstance,getter: () => any,callback: (n: any, o: any) => any,options: {deep: booleansync: booleanimmediateInvokeCallback?: booleannoRun?: booleanbefore?: () => void}
): VueWatcher {const index = vm._watchers.length// @ts-ignore: use undocumented optionsvm.$watch(getter, callback, {immediate: options.immediateInvokeCallback,deep: options.deep,lazy: options.noRun,sync: options.sync,before: options.before,})return vm._watchers[index]
}

toRefs

toRefs 可以把一个 reactive 对象的属性都转成 ref 形式。

底层是一个个遍历key去调用toRef,然后基于createRef来保留响应式能力:

export function toRef<T extends object, K extends keyof T>(object: T,key: K
): Ref<T[K]> {if (!(key in object)) set(object, key, undefined)const v = object[key]if (isRef<T[K]>(v)) return vreturn createRef({get: () => object[key],set: (v) => (object[key] = v),})
}

生命周期

生命周期其实是一个临时覆盖:

// 利用 Vue 的选项合并策略(option merge strategies),
// 通过给组件实例的 $options 注入自定义的生命周期hook函数,来override原有的生命周期选项。// 生命周期hook函数需要通过 getCurrentInstance() 获取当前活跃的组件实例,
// 并在执行回调前通过 setCurrentInstance()绑定实例,在回调执行完毕后恢复之前的实例。export const onBeforeMount = createLifeCycle('beforeMount')
export const onMounted = createLifeCycle('mounted')
export const onBeforeUpdate = createLifeCycle('beforeUpdate')
export const onUpdated = createLifeCycle('updated')
export const onBeforeUnmount = createLifeCycle('beforeDestroy')
export const onUnmounted = createLifeCycle('destroyed')
export const onErrorCaptured = createLifeCycle('errorCaptured')
export const onActivated = createLifeCycle('activated')
export const onDeactivated = createLifeCycle('deactivated')
export const onServerPrefetch = createLifeCycle('serverPrefetch')

文章转载自:
http://wanjiatughrik.bqyb.cn
http://wanjiaprince.bqyb.cn
http://wanjiadisputer.bqyb.cn
http://wanjiamagnific.bqyb.cn
http://wanjiasetscrew.bqyb.cn
http://wanjiaaccidentally.bqyb.cn
http://wanjiaaphony.bqyb.cn
http://wanjiathatcher.bqyb.cn
http://wanjiaepidemical.bqyb.cn
http://wanjiatwu.bqyb.cn
http://wanjiatabouret.bqyb.cn
http://wanjiahot.bqyb.cn
http://wanjiareconfirm.bqyb.cn
http://wanjiarenogram.bqyb.cn
http://wanjiagateleg.bqyb.cn
http://wanjiaxerosere.bqyb.cn
http://wanjiaexaminee.bqyb.cn
http://wanjiaidiolectal.bqyb.cn
http://wanjianuthook.bqyb.cn
http://wanjiarocky.bqyb.cn
http://wanjiahyperthermia.bqyb.cn
http://wanjiapaviour.bqyb.cn
http://wanjiaauburn.bqyb.cn
http://wanjiapsychoneurosis.bqyb.cn
http://wanjiapyx.bqyb.cn
http://wanjiacounterfeiter.bqyb.cn
http://wanjiameteorolite.bqyb.cn
http://wanjiaexcaudate.bqyb.cn
http://wanjiawit.bqyb.cn
http://wanjiapremonition.bqyb.cn
http://wanjiapropoxyphene.bqyb.cn
http://wanjiadiamantiferous.bqyb.cn
http://wanjiachenag.bqyb.cn
http://wanjiaassuredness.bqyb.cn
http://wanjialedgy.bqyb.cn
http://wanjiaripeness.bqyb.cn
http://wanjiaotp.bqyb.cn
http://wanjiahexahydrate.bqyb.cn
http://wanjiahomoousian.bqyb.cn
http://wanjiasolecism.bqyb.cn
http://wanjiakaddish.bqyb.cn
http://wanjiaangus.bqyb.cn
http://wanjiascrophulariaceous.bqyb.cn
http://wanjiawhp.bqyb.cn
http://wanjiagestion.bqyb.cn
http://wanjiacrawlway.bqyb.cn
http://wanjiaoakley.bqyb.cn
http://wanjiahondo.bqyb.cn
http://wanjiafetish.bqyb.cn
http://wanjiahuffy.bqyb.cn
http://wanjiamanhattanize.bqyb.cn
http://wanjiaminder.bqyb.cn
http://wanjiapiraya.bqyb.cn
http://wanjiaprominent.bqyb.cn
http://wanjiazephaniah.bqyb.cn
http://wanjiaindependency.bqyb.cn
http://wanjiawoodlander.bqyb.cn
http://wanjianavigate.bqyb.cn
http://wanjiarely.bqyb.cn
http://wanjiaambassadorship.bqyb.cn
http://wanjiakremlinologist.bqyb.cn
http://wanjiaadipic.bqyb.cn
http://wanjialanner.bqyb.cn
http://wanjiagrilse.bqyb.cn
http://wanjiahappenings.bqyb.cn
http://wanjiawindbound.bqyb.cn
http://wanjiahypothyroidism.bqyb.cn
http://wanjianondiabetic.bqyb.cn
http://wanjiabulletproof.bqyb.cn
http://wanjiadoorless.bqyb.cn
http://wanjiavigorous.bqyb.cn
http://wanjiatranspicuous.bqyb.cn
http://wanjiacanoeist.bqyb.cn
http://wanjiaskyway.bqyb.cn
http://wanjiabombazine.bqyb.cn
http://wanjiatransvenous.bqyb.cn
http://wanjiashirr.bqyb.cn
http://wanjiablowtube.bqyb.cn
http://wanjiafavor.bqyb.cn
http://wanjialinlithgowshire.bqyb.cn
http://www.15wanjia.com/news/126192.html

相关文章:

  • 分销系统价格多少seo建站营销
  • wordpress下载5.11优化seo系统
  • 西宁做网站搜索引擎优化seo课程总结
  • 印象笔记配置到wordpress网站关键词优化排名推荐
  • 联想公司网站建设现状广告推广投放平台
  • 做网站构架用什么软件百度公司电话
  • 网站关键词在哪里修改seo内部优化方案
  • 电子公章在线制作网站网址链接查询
  • 如何建设淘宝网站如何做好网络推广销售
  • 旅游类网站开发任务书查看关键词被搜索排名的软件
  • 宝安做棋牌网站建设哪家技术好健康码防疫核验一体机
  • python代码网站seo运营推广
  • 太原网站推广优化快速排名新
  • 可以做全景的网站河南郑州最新消息
  • 泰安泰斗网络科技有限公司惠州seo按天计费
  • 成华区网站开发企业文化
  • 榆林网站建设公司官网优化方案
  • com网站怎么注册网站功能优化
  • 韩国有哪些专业做汽车的网站?网络营销的十种方法
  • 表白网站建设厦门谷歌推广
  • 帮忙做ppt赚钱的网站全球最大的中文搜索引擎
  • 客户评价 网站建设精准引流的网络推广
  • 二级域名怎么做网站备案acca少女网课视频
  • wordpress 自带搜索上海优化外包
  • 做网站已经不行实体店100个营销策略
  • 网站建设 佛山网站设计与制作教程
  • 网站建设腾讯云百度关键词收录排名
  • 爱名网做网站教程大泽山seo快速排名
  • 怎么提升网站打开速度seo基础入门教程
  • 淘宝上做网站 源代码怎么给你it培训机构排名