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
functionmakeLocalGetters(store,namespace){constgettersProxy={}// 获取命名空间长度constsplitPos=namespace.length// 循环每个 getters Object.keys(store.getters).forEach(type=>{// skip if the target getter is not match this namespace// 跳过没有匹配与命名空间不匹配的 getterif(type.slice(0,splitPos)!==namespace)return// extract local getter type// 提出 getter 类型// 有 namespace 如:namespace 为 moduleA/moduleC/,type 为 moduleA/moduleC/cGetter,则 localType 为 cGetter// 没有 namespace , 或者说那么spacename ='' ,type 为 cGetter,则 localType 为 cGetter// slice 不改变原字符串constlocalType=type.slice(splitPos)// Add a port to the getters proxy.// Define as getter property because// we do not want to evaluate the getters in this time.Object.defineProperty(gettersProxy,localType,{get: ()=>store.getters[type],// 获取原字符串所对应的 getterenumerable: true})})returngettersProxy}
在上面和前面有不少地方调用了 _withCommit 函数,,这个函数他有啥妙用呢? 他就是防止 state 被除了 mutation 以外的函数或者直接被修改,这个函数在 store 类里面,要结合 enableStrictMode 函数来看
_withCommit(fn){constcommitting=this._committingthis._committing=truefn()this._committing=committing}functionenableStrictMode(store){store._vm.$watch(function(){returnthis._data.$$state},()=>{if(process.env.NODE_ENV!=='production'){assert(store._committing,`Do not mutate vuex store state outside mutation handlers.`)}},{deep: true,sync: true})}
这是对 我看Vuex(二) 里面的一些函数的介绍,感觉放在二里面,层次显得不清楚
getNamespace
makeLocalContext
unifyObjectStyle
makeLocalGetters
registerMutation
registerAction
registerGetter
在上面和前面有不少地方调用了
_withCommit
函数,,这个函数他有啥妙用呢?他就是防止 state 被除了 mutation 以外的函数或者直接被修改
,这个函数在store
类里面,要结合enableStrictMode
函数来看从上面函数知道,它只是改变
this._commiting
的状态,在enableStrictMode
里监听state
。我们知道 vuex 规定只有在mutation
函数才能修改state
,这里当_withCommit
执行时,会执行 传入的fn
函数,然后fn
修改了state
,导致enableStrictMode
里的watch
检测到了变化,执行后面的函数,在里面先进行判断this._commiting
是否是true
,否则就会抛出错误,这样就做到了很好的保证总结
总的来说就是把所有的
getter
,mutation
,action
放到store
上,然后做相应的操作The text was updated successfully, but these errors were encountered: