使用vuex中的 mapmutations 辅助函数时怎么传递参数

使用vuex中的 mapmutations 辅助函数时怎么传递参数,第1张

thisincrement({ amount: 10 }) 或 thisadd({ amount: 10 })
用this$storecommit('xxx',obj)时可以传递一个obj,那么用mapMutations()时怎么传递一个额外的参数。

thisincrement({ amount: 10 }) 或 thisadd({ amount: 10 })
以例子中method的increment方法为例:
increment(args){
return this$storedispatchapply(this$store,['incrememt']concat(args))
}

直接看官网 dispatch 的定义:
综上:多参数封装为 Object 类型放在第一或者第二个参数里就好了。

ps:如果单个参数也这么写,就不存在多参数的疑问/概念啦~

Vuex 是一个专为 Vuejs 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
如果一份数据需要在多个组件中使用,组件间传值又比较复杂,就可以使用vuex托管数据。

state选项: 定义状态(状态就是数据)。
mutations选项: 定义修改状态的方法(注意:这里面只能定义同步方法)。

$store: 返回的是当前项目中的全局状态对象。
commit()方法: 用于执行指定的mutations里面的方法。

在组件中,直接通过$storestate就可以获取到全局状态对象管理的状态数据,直接渲染到页面。

state选项: 定义状态(状态就是数据)。

通过 $storestate数据名 使用。

getters选项: 定义计算属性。方法的参数是状态对象。

通过 $storegetters属性名 使用计算属性。

mutations选项: 定义修改状态的方法(注意:这里的方法一般都是同步方法)。方法的第一个参数是状态对象,第二个参数是新值。

通过 commit() 方法,调用mutations里面的方法。

actions选项: 定义 *** 作状态的方法(这里的方法可以定义异步方法)。
注意: actions里的方法最好不要直接 *** 作state状态,而是通过调用mutations里面的方法去修改状态。所以,actions直接 *** 作的是mutations。

通过 dispatch() 方法,调用actions里面定义的方法。

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。

namespaced属性: 默认情况下,action、mutation 和 getter 是注册在全局命名空间的。通过设置namespaced属性为true,将action、mutation 和 getter全部注册到私有命名空间中。

要从私有模块中获取数据,方式是: $storestate模块名称模块的数据

要从私有模块中获取计算属性,方式是: $storegetters['模块名/计算属性']

调用私有模块里面的mutations定义的方法,方式是: $storecommit('模块名/方法名',新值)

调用私有模块里面的actions定义的方法,方式是: $storedispatch('模块名/方法名',新值)

直接在模板中使用全局状态管理数据,表达式会写的很长。所以可以使用计算属性。

通过映射函数mapState、mapGetters、mapActions、mapMutations,可以将vuexstore中的属性映射到vue实例身上,这样在vue实例中就能访问vuexstore中的属性了,便于 *** 作vuexstore。

如果vuex里面state的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapState 映射函数,自动生成页面中的计算属性。
如果vuex里面getters的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapGetters 映射函数,自动生成页面中的计算属性。
注意: 如果要映射模块里面的state/getters,函数的第一个参数设置为模块的名称。

如果定义的方法名跟全局管理对象中mutations里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapMutations 映射函数生成方法。
如果定义的方法名跟全局管理对象中actions里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapActions 映射函数生成方法。
注意: 如果要映射私有模块中mutations/actions里面的方法,函数的第一个参数设置为模块的名称。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12902309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存