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

网页版传奇游戏排行榜信息流广告优化师

网页版传奇游戏排行榜,信息流广告优化师,品牌做网站还是app,浙江建设银行网站源码是ts编写的,这里部分简化成js便于阅读 function ref(value) {return createRef(value, false) }function createRef(rawValue, shallow) { //shallow是否是浅层定义数据,用于区别ref和shallowRefif (isRef(rawValue)) {//如果已经是ref直接返回源数据return rawValue}retu…

源码是ts编写的,这里部分简化成js便于阅读

function ref(value) {return createRef(value, false)
}function createRef(rawValue, shallow) { //shallow是否是浅层定义数据,用于区别ref和shallowRefif (isRef(rawValue)) {//如果已经是ref直接返回源数据return rawValue}return new RefImpl(rawValue, shallow)
}class RefImpl<T> {private _value: Tprivate _rawValue: Tpublic dep?: Dep = undefinedpublic readonly __v_isRef = trueconstructor(value: T,//第一个参数value:传入的源数据public readonly __v_isShallow: boolean //第二个参数__v_isShallow:是否是浅层次响应的属性) {this._rawValue = __v_isShallow ? value : toRaw(value)//toRaw是为了防止死循环this._value = __v_isShallow ? value : toReactive(value)//初始化数据如果是已经包装过的__v_isShallow就是true,否则通过toReactive包装传入的参数}get value() {trackRefValue(this) //依赖收集return this._value}set value(newVal) {const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal)//判断是否已经是vue包装过的对象newVal = useDirectValue ? newVal : toRaw(newVal)if (hasChanged(newVal, this._rawValue)) {this._rawValue = newValthis._value = useDirectValue ? newVal : toReactive(newVal)//如果已经包装过返回源数据,否则通过toReactive包装传入的参数triggerRefValue(this, newVal)//触发响应式更新}}
}toReactive = (value) => isObject(value) ? reactive(value) : value //基本数据类型通过class类依赖收集触发更新,引用数据类型通过Proxy代理实现isObject = (val) => val !== null && typeof val === 'object' //上面用到的函数:判断是否是一个对象//reactive()函数调用createReactiveObject函数(内部通过new Proxy())创建响应式数据,如下:function createReactiveObject(target: Target,isReadonly: boolean,baseHandlers: ProxyHandler<any>,collectionHandlers: ProxyHandler<any>,proxyMap: WeakMap<Target, any>
) {if (!isObject(target)) { //如果不是对象直接返回源数据,所以必须传入对象才有效if (__DEV__) {console.warn(`value cannot be made reactive: ${String(target)}`)}return target}// target is already a Proxy, return it.// exception: calling readonly() on a reactive objectif (target[ReactiveFlags.RAW] &&!(isReadonly && target[ReactiveFlags.IS_REACTIVE])) {return target}// target already has corresponding Proxyconst existingProxy = proxyMap.get(target)if (existingProxy) {return existingProxy}// only specific value types can be observed.const targetType = getTargetType(target)if (targetType === TargetType.INVALID) {return target}const proxy = new Proxy(//创建Proxy代理target,targetType === TargetType.COLLECTION ? collectionHandlers : baseHandlers)proxyMap.set(target, proxy)return proxy
}

总结:

ref() 函数通过调用new RefImpl(rawValue, shallow)这个class类来包装数据,内部有value属性(可读get通过trackRefValue收集依赖;可写set通过triggerRefValue更新依赖), 传入的值会调用toReactive函数进行封装. 
toReactive = (value) => isObject(value) ? reactive(value) : value

isObject = (val) => val !== null && typeof val === 'object'

reactive()函数调用createReactiveObject函数(内部通过new Proxy())创建响应式数据

ref:定义基本数据类型通过class类中的value属性依赖收集触发更新;定义引用数据类型会调用reactive()实现数据代理

reactive:只用于定义引用数据类型,通过Proxy代理实现

附源码地址 https://github.com/vuejs/core/tree/v3.3.4/packages/reactivity/src

http://www.ds6.com.cn/news/62184.html

相关文章:

  • 做网站合伙怎么分网站收录是什么意思
  • 校园类网站模板免费下载公司推广渠道有哪些
  • 进出口贸易网站制作东莞网站推广优化网站
  • 正规的网站建设企业网站制作网络营销公司怎么注册
  • wordpress弹窗视频seo网站排名的软件
  • 北京个人做网站b2b网站大全免费推广
  • 网站背景设计公司的seo是什么意思
  • 佛山企业门户网站建设软文写作经验
  • wordpress批量urlwin10优化大师怎么样
  • 创新的网站建站小黄豆crm
  • 在线查看网站源码企业门户网站模板
  • 个人软件制作网站网络软文发布平台
  • 换接入商网站备案新闻稿发布
  • 棠下网站建设免费加精准客源
  • 长沙旅游攻略三日游seo专业技术培训
  • 专业创建网站正规seo关键词排名网络公司
  • pc软件下载网站网站推广技巧有哪些
  • wordpress投稿vipseo优化官网
  • 网站排名优化金苹果下拉提高百度搜索排名
  • 正规品牌网站设计品牌seo营销推广服务公司
  • 网站帮企业做推广价格怎么算百度竞价排名公式
  • 大连网站的优化电商数据查询平台
  • 石家庄 科技 公司 网站建设seo网站关键词优化
  • 提升网站流量该怎么做深圳网络推广营销
  • 临海做网站公司大量微信群推广代发广告
  • 网站开发朋友圈最新足球赛事
  • 哪些网站做推广线上营销有哪些
  • 幕墙设计培训乡网站建设云优化软件
  • 英文网站建设模板全国疫情又严重了
  • 使用爬虫做的网站女教师遭网课入侵直播录屏曝光8