this.commit报错

来源:3-20 本地缓存处理方案

一只老梁

2022-01-14

老师,我的this.commit 报这个错误:
Property ‘commit’ does not exist on type ‘{ login(context: any, userInfo: any): Promise; }’

我在控制台打印this的时候,是有commit这方法,我执行了this.commit(“user/token”, “token…”)就没有报错。

我还尝试用context.commit也不会报错,只是要去掉user/
context.commit(“token”, “token…”)
这两种有什么区别吗?

写回答

1回答

Sunday

2022-01-14

你好

这涉及到了一个  vuex 的命名空间问题。

vuex 的命名空间分为两种:

  1. 全局命名空间。 createSotre 下的

  2. 模块命名空间。具体 module 下的(需要 namespaced = true)

那么如果期望触发《全局》下的 mutation,需要 commit(mutation),而局部下的,需要commit(模块名/mutation)。

这就是为什么当你使用  this 的时候,需要添加 'user/ xxx' 的原因.

但是除了 this 之外,还有另外一个概念,那就是 context。 context 是上下文的意思,《全局》和 《局部》都有各自的上下文(全局上下文,局部上下文)。 而你在某个模块的 action 下获取到的就是《当前《局部》的 context,也就是局部上下文》。在局部上下文下,访问局部的 mutation,只可以直接触发的,也就是 context.commit(“token”, “token…”) 的原因。


0
5
一只老梁
回复
Sunday
了解了,谢谢
2022-01-21
共5条回复

基于Vue3新标准,打造后台综合解决方案

基于Vue3重写Vue-element-admin,打造后台前端综合解决方案

1941 学习 · 1687 问题

查看课程