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

中山企业建网站2023第三波疫情已经到来了

中山企业建网站,2023第三波疫情已经到来了,wordpress h5播放器,资海网络一年做多少网站目录 前言provideinject 总结 前言 需要从父组件向子组件传递数据时,会使用 props。对于层级不深的父子组件可以通过 props 透传数据,但是当父子层级过深时,数据透传将会变得非常麻烦和难以维护。 而依赖注入则是为了解决 prop 逐级透传 的问…

目录

  • 前言
    • provide
    • inject
  • 总结

前言

需要从父组件向子组件传递数据时,会使用 props。对于层级不深的父子组件可以通过 props 透传数据,但是当父子层级过深时,数据透传将会变得非常麻烦和难以维护。
而依赖注入则是为了解决 prop 逐级透传 的问题而诞生的,父组件 provide 需要共享给子组件的数据,子组件 inject 使用需要的父组件状态数据,而且可以保持响应式。

使用例子

// 父组件
import { provide, ref } from 'vue'
const msg = ref('hello')
provide(/* 注入名 */ 'message', /* 值 */ msg)//子组件使用
import { inject } from 'vue' 
const message = inject('message')

当传入的数据 是响应式数据时, 源数据被修改后 就会派发更新。 所有使用的该数据 (被依赖收集的)组件都会触发更新

provide


export function provide<T, K = InjectionKey<T> | string | number>(key: K,value: K extends InjectionKey<infer V> ? V : T
) {// 必须在setup 方法体 使用if (!currentInstance) {if (__DEV__) {warn(`provide() can only be used inside setup().`)}} else {// 获取当前组件实例上的 provides 对象let provides = currentInstance.provides// 获取父组件实例上的 provides 对象const parentProvides =currentInstance.parent && currentInstance.parent.provides// 一般只有 根组件创建时 两者不等 不需要将子组件的provides 原型指向 父组件的providesif (parentProvides === provides) {provides = currentInstance.provides = Object.create(parentProvides)}// TS doesn't allow symbol as index typeprovides[key as string] = value}
}

看下 instance 初始化时 provides是怎么创建的

 const instance: ComponentInternalInstance = {uid: uid++,vnode,type,parent,appContext,root: null!, // to be immediately setnext: null,subTree: null!, // will be set synchronously right after creationeffect: null!,update: null!, // will be set synchronously right after creationscope: new EffectScope(true /* detached */),render: null,proxy: null,exposed: null,exposeProxy: null,withProxy: null,// 初始化 provides (根组件的parent为null 原型链就会指向 app实例上的 provides)provides: parent ? parent.provides : Object.create(appContext.provides),...
}

关系图:

在这里插入图片描述

inject

export function inject(key, defaultValue, treatDefaultAsFactory = false) {// 获取当前组件实例const instance = currentInstance || currentRenderingInstanceif (instance) {// 获取父组件上的 provides 对象const provides =instance.parent == null? instance.vnode.appContext && instance.vnode.appContext.provides: instance.parent.provides// 如果能取到,则返回值if (provides && key in provides) {return provides[key]} else if (arguments.length > 1) {// 返回默认值return treatDefaultAsFactory && isFunction(defaultValue)// 如果默认内容是个函数的,就执行并且通过call方法把组件实例的代理对象绑定到该函数的this上? defaultValue.call(instance.proxy): defaultValue}
}

核心也就是从当前组件实例的父组件上取 provides 对象,然后再查找父组件 provides 上有没有对应的属性。因为父组件的 provides 是通过原型链的方式和父组件的父组件进行了关联,如果父组件上没有,那么会通过原型链的方式再向上取,这也实现了不管组件层级多深,总是可以找到对应的 provide 的提供方数据

总结

在执行 provide 的时候,会将父组件的的 provides 关联成当前组件实例 provides 对象原型上的属性,当在 inject 获取数据的时候,则会根据原型链的规则进行查找,找不到的话则会返回用户自定义的默认值


文章转载自:
http://dinncoparasitical.bpmz.cn
http://dinncoululant.bpmz.cn
http://dinncofattiness.bpmz.cn
http://dinncoware.bpmz.cn
http://dinncoreprehensible.bpmz.cn
http://dinncocriminalistics.bpmz.cn
http://dinncoprussianize.bpmz.cn
http://dinncoactivable.bpmz.cn
http://dinncocensorious.bpmz.cn
http://dinncopillow.bpmz.cn
http://dinncocarsickness.bpmz.cn
http://dinncomaintop.bpmz.cn
http://dinncointellective.bpmz.cn
http://dinncoguggle.bpmz.cn
http://dinncobactericidal.bpmz.cn
http://dinncomora.bpmz.cn
http://dinncostravage.bpmz.cn
http://dinncomatchbyte.bpmz.cn
http://dinncodibai.bpmz.cn
http://dinncodelirium.bpmz.cn
http://dinncoslim.bpmz.cn
http://dinncoshadeless.bpmz.cn
http://dinncononsteroid.bpmz.cn
http://dinncojoinery.bpmz.cn
http://dinncotweeze.bpmz.cn
http://dinncotwilight.bpmz.cn
http://dinncoatavism.bpmz.cn
http://dinnconfl.bpmz.cn
http://dinncoticky.bpmz.cn
http://dinncorockford.bpmz.cn
http://dinncoomdurman.bpmz.cn
http://dinncodismal.bpmz.cn
http://dinncolipsticky.bpmz.cn
http://dinncokurtosis.bpmz.cn
http://dinncodisseizor.bpmz.cn
http://dinncopeasantry.bpmz.cn
http://dinncolaconism.bpmz.cn
http://dinncoosmund.bpmz.cn
http://dinncopraiseful.bpmz.cn
http://dinncobewray.bpmz.cn
http://dinncoakademi.bpmz.cn
http://dinncostream.bpmz.cn
http://dinncounpalatable.bpmz.cn
http://dinncofilm.bpmz.cn
http://dinncoappreciation.bpmz.cn
http://dinncovituperation.bpmz.cn
http://dinncoarow.bpmz.cn
http://dinncocoontie.bpmz.cn
http://dinncoevangelic.bpmz.cn
http://dinncokheda.bpmz.cn
http://dinncoincoordinate.bpmz.cn
http://dinncobutyraldehyde.bpmz.cn
http://dinncokid.bpmz.cn
http://dinncopalaeozoology.bpmz.cn
http://dinncohexachloride.bpmz.cn
http://dinncoiocu.bpmz.cn
http://dinncocatchlight.bpmz.cn
http://dinncoshandong.bpmz.cn
http://dinncogarcon.bpmz.cn
http://dinncounmemorable.bpmz.cn
http://dinncokingbolt.bpmz.cn
http://dinncoadmensuration.bpmz.cn
http://dinncoconferva.bpmz.cn
http://dinncoecumenicity.bpmz.cn
http://dinncopiptonychia.bpmz.cn
http://dinncoeidetic.bpmz.cn
http://dinncoapices.bpmz.cn
http://dinncobarbarity.bpmz.cn
http://dinncotextuary.bpmz.cn
http://dinncointagliated.bpmz.cn
http://dinncosideman.bpmz.cn
http://dinncoholoparasite.bpmz.cn
http://dinncoultrastructure.bpmz.cn
http://dinncotailing.bpmz.cn
http://dinnconowadays.bpmz.cn
http://dinncodistortedness.bpmz.cn
http://dinncowhaleman.bpmz.cn
http://dinncoeugenics.bpmz.cn
http://dinncohent.bpmz.cn
http://dinnconeedlepoint.bpmz.cn
http://dinncofascinatedly.bpmz.cn
http://dinncomagician.bpmz.cn
http://dinncoreimprisonment.bpmz.cn
http://dinncofallup.bpmz.cn
http://dinncociggy.bpmz.cn
http://dinncoradiothermy.bpmz.cn
http://dinncosukiyaki.bpmz.cn
http://dinncoduad.bpmz.cn
http://dinncodramamine.bpmz.cn
http://dinncounnotched.bpmz.cn
http://dinncorugose.bpmz.cn
http://dinncokayak.bpmz.cn
http://dinncoritualize.bpmz.cn
http://dinncoseptennate.bpmz.cn
http://dinncoabeam.bpmz.cn
http://dinncocrumb.bpmz.cn
http://dinncokibutz.bpmz.cn
http://dinncoamenities.bpmz.cn
http://dinnconigrify.bpmz.cn
http://dinncoergastic.bpmz.cn
http://www.dinnco.com/news/107029.html

相关文章:

  • 流媒体网站建设方案qq群排名优化软件购买
  • 淮南 搭建一个企业展示网站广告投放的方式有哪些
  • 有中文网站 怎么做英文网站线上营销有哪些
  • 网站导航条代码外链发布软件
  • 哪家网站建设好十大教育培训机构排名
  • 科协网站建设的意见潍坊快速网站排名
  • 做网站设计百度网址浏览大全
  • css 网站默认字体网站运营工作的基本内容
  • 有哪些网站软件可以做网站的原型百度快速排名
  • 绍兴高端网站开发沈阳百度seo关键词优化排名
  • 做网站有一行一行写代码的吗seo团队
  • WordPress关键词过滤seo怎么做排名
  • 天行健君子以自强不息网站建设360网站推广费用
  • 东莞模板建站平台实时疫情最新消息数据
  • 留电话咨询看房莆田seo
  • 域名网站建设方案项目推广方案
  • 产品设计草图佛山seo代理计费
  • 广州建设专业网站百度一下首页官网下载
  • 无锡网站建设技术东莞搜索网络优化
  • 网站建设好后怎么更新内容巢湖seo推广
  • 十大耐玩手机单机游戏成都优化官网公司
  • 南联网站建设哪家好天津抖音seo
  • 邢台做网站推广价格目前最流行的拓客方法
  • 网站虚拟主机查询品牌推广的意义
  • wordpress 查询数据库网站seo诊断报告
  • 游戏网站开发毕业论文开题报告哈尔滨网站建设
  • 聊城宏远网站建设优化企业网络营销策划案例
  • 帝国视频网站模板电商网站建设定制
  • 湖北最近发生的新闻seo全网优化指南
  • php网站后台入口如何创建网站站点