0
点赞
收藏
分享

微信扫一扫

vuex与组合API的使用


vuex

setup函数中访问store可以调用​​useStore()​​函数,这个调用和选项API通过​​this.$store​​是一样的。而且访问​​state​​和​​getters​​,需要使用​​computed()​​函数创建计算属性和选项API中创建计算属性也是一样的。如果想要访问​​mutation​​和​​action​​需要我们调用setup对象的​​commit​​和​​dispatch​​函数。

vuex是单一的状态树,一个对象包括应用程序的所有状态。当我们的应用程序变得很复杂时会导致store对象变得很繁琐,这是我们不想看到的。我们可以将store切分成多个模块,让每个模块拥有自己的​​state​​和​​mutation​​以及​​action​​和​​getters​​还有嵌套的子模块。其中模块内部的mutation和getters接收的第一个参数是模块的局部状态对象。模块内部的actions中的局部状态是通过​​context.state​​暴露出来的,而且根节点的状态是用​​context.rootState​​表示。如果是模块内部的getters的话,根节点状态是作为第三个参数暴露出来的。一般情况下,模块内部的后面三个是注册再去爱全局命名空间下的,这样可以让多个模块对同一的mutation和action作出响应。如果想要模块称为带命名空间的模块,可以使用​​namespaced​​设置为​​true​​的方法。当模块被注册后,它的模块中后面三个的属性会根据模块注册的路径自动命名。

const  zss = {
state: () => {},
mutations: {},
actions: {},
getters: {}
}

同一模块内使用的模块内容不需要添加前缀。模块注册时也可以根据我们需求给命名添加任意前缀。当命名空间和非命名空间进行切换也不会影响模块内的代码。当我们在命名空间的模块内注册全局的action时,可以标记root为true,然后将actio放到函数​​handler()​​中。如果组件内使用辅助函数绑定命名空间的模块时,可以看起来比较麻烦。vue3中创建命名空间的辅助函数可以使用​​createNamespacedHelpers()​​方法,这个方法返回的是一个对象,这个对象中有给命名空间值绑定的新组件进行绑定辅助函数。使用辅助函数进行映射去访问命名空间的模块时最简单的方法,而且将模块的名字作为第一个参数进行传递,还不会出错。我们需要记住的是当我们想要修改store状态,通过提交对应的mutation进行修改,而不能直接修改其状态。

举报

相关推荐

0 条评论