而arrayMethods的__proto__指向Array.prototype,但是其push等属性重写了,先调用Array原来的相应方法等等一系列操作,再调用收集的watcher的update方法,如果收集了renderWatcher,就会reactive ---对象的dep从哪里来? 上面说过,observe(c),new一个Observer 实例childOb,c的_ob_属性指向childOb,childOb里面有一个dep属性,而...
reactive定义的响应式数据是“深层次”的 <template>汽车信息:一台{{ car.brand }}汽车,价值{{ car.price }}万游戏列表:<liv-for="g in games":key="g.id">{{ g.name }}测试:{{obj.a.b.c.d}}修改汽车价格修改第一游戏测试</template>import{ reactive }from'vue'// 数据letcar =reactive({bra...
?dep:?Dep?|?ReactiveEffect[],??debuggerEventExtraInfo?:?DebuggerEventExtraInfo)?{??//?spread?into?array?for?stabilization??const?effects?=?isArray(dep)???dep?:?[...dep]??for?(const?effect?of?effects)?{??
-js-component my-prop-object="${javaArrayOfObjects}"></vue-js-component> 这是.jsp文件中的vue组件,我可以访问javaArrayOfObjects,但在vue组件中,我只能看到java对象的名称,比如[ html.java.JavaObjectsDto1, html.java.JavaObjectsDto2, html.java.JavaObjectsDto3但是如果 浏览33提问于2019-10-18得票数...
【vue3源码】七、reactive——Object的响应式实现 参考代码版本:vue 3.2.37 官方文档:https://vuejs.org/ reactive返回一个对象的响应式代理。 使用 const obj = { count: 1, flag: true, obj: { str: '' } } const reactiveObj = reactive(obj) ...
上次一起阅读了watch和computed的源码,其实应该先看副作用effect,因为各个响应式的API里基本都用到了,等结束了reactive和readonly,以及ref,就一起看看effect。这次要说的是reactive和readonly,两者在实现上流程大体一致。尤其是对Map和Set的方法的代理拦截,多少有点妙。 一、reactive和readonly 1. reactive相关类型...
reactive首先判断target是不是只读的proxy,如果是的话,直接返回target;否则调用一个createReactiveObject方法。
functiongetTargetType(value:Target){returnvalue[ReactiveFlags.SKIP]||!Object.isExtensible(value)?TargetType.INVALID:targetTypeMap(toRawType(value))}functiontargetTypeMap(rawType:string){switch(rawType){case'Object':case'Array':returnTargetType.COMMONcase'Map':case'Set':case'WeakMap':case'WeakSet':retur...
一、Reactive源码 1、reactive 源码路径:packages/reactivity/src/reactive.ts exportfunctionreactive(target: object) { //iftrying to observe areadonlyproxy,returnthereadonlyversion. // 是否是只读响应式对象if(isReadonly(target)) {returntarget
它们有啥关系,其实没有啥关系,只是大家习惯性的会回答 Object.defineProperty 不能拦截 Array 的操作,这句话说得对但也不对。 使用Object.defineProperty 拦截 Array Object.defineProperty 可用于实现对象属性的 get 和 set 拦截,而数组其实也是对象,那自然是可以实现对应的拦截操作,如下: ...