junhan
junhan
@JuneAndGreen demo22中的共享vuex state的方式存在一定的问题: 一个是内存泄漏问题: 多个页面的store使用的是同一个state对象,每个页面都把state对象定义成响应式的(也就是给每个属性定义getter,setter,第二个页面的getter,setter会在前一个的基础上再套一层),当页面被销毁时,这些getter,setter还在。 当你把一个对象赋值到state的某个属性时会触setter,vue会把这个对象定义成响应式的,问题在于这些被销毁的页面的setter仍然在定义自己的响应式。显然这些响应式永远用不着,这里会有一定的内存泄漏 一个是响应式对象的__ob__属性相互覆盖问题: vue会为响应式对象添加__ob__属性,来表示这个对象已经是响应式的。多个页面的__ob__属性会相互覆盖,这导致某些依赖这个__ob__属性的场景会出现非预期的结果,比如以下两点需要注意 比如把一个已经被定义成响应式的对象赋值到state的某个属性时,因为vue内部是通过instanceof Observer来判断的  多个页面的Observer不是同一个对象。这会导致vue认为这对象不是响应式的,会重复定义响应式。如果频繁设置会导致严重的内存泄露。 比如调用数组的push,vue通过改写数组push,unshift,splice方法来实现数组这类变化的监听,只有__ob__属性所属的页面才能收到变化的通知。 