You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
exportclassObserver{value: any;dep: Dep;vmCount: number;// number of vms that have this object as root $dataconstructor(value: any){this.value=valuethis.dep=newDep()this.vmCount=0def(value,'__ob__',this)if(Array.isArray(value)){if(hasProto){protoAugment(value,arrayMethods)}else{copyAugment(value,arrayMethods,arrayKeys)}this.observeArray(value)}else{// 实例化对象是一个对象,进入walk方法this.walk(value)}}
面试官:Vue.observable你有了解过吗?说说看
一、Observable 是什么
Observable
翻译过来我们可以理解成可观察的我们先来看一下其在
Vue
中的定义返回的对象可以直接用于渲染函数和计算属性内,并且会在发生变更时触发相应的更新。也可以作为最小化的跨组件状态存储器
其作用等同于
在
Vue 2.x
中,被传入的对象会直接被Vue.observable
变更,它和被返回的对象是同一个对象在
Vue 3.x
中,则会返回一个可响应的代理,而对源对象直接进行变更仍然是不可响应的二、使用场景
在非父子组件通信时,可以使用通常的
bus
或者使用vuex
,但是实现的功能不是太复杂,而使用上面两个又有点繁琐。这时,observable
就是一个很好的选择创建一个
js
文件在
.vue
文件中直接使用即可三、原理分析
源码位置:src\core\observer\index.js
Observer
类walk
函数defineReactive
方法参考文献
The text was updated successfully, but these errors were encountered: