vue3.0的使用
安装vuex-新建store文件夹
npm install vuex@next --save
|
并在根目录src
下创建store文件夹,并创建文件模块
└─src ├─assets ├─components ├─store │ └─modules │ └─└─moduleA.js │ └─└─moduleB.js │ └─index.js │ └─getters.js └─util
|
在store文件夹中配置根store
import { createStore } from 'vuex' import moduleA from './modules/moduleA' import moduleB from './modules/moduleB' import getters from './getters'
const store = createStore({ modules: { moduleA, moduleB }, getters })
export default store
const getters = { token: state => state.user.token, hasPermission: state => key => { return state.user.permissions && state.user.permissions.indexOf(key) > -1 }, } export default getters
const moduleA = { state: { hasLogin: false }, mutation: { changeLoginStatus(state) { state.hasLogin = !state.hasLogin } } } export default moduleA
|
使用store
import { createApp } from 'vue' import App from './App.vue' import Store from './store'
const app = createApp(App) app.use(Store)
app.mount('#app')
|
在文件中使用store
this.$store.commit('changeLoginStatus') console.log(this.$store._mutations)
|
命名空间
默认情况下,模块内部的 action 和 mutation 仍然是注册在全局名空间的——这样使得多个模块能够对同一个 action 或 mutation 作出响应。Getter 同样也默认注册在全局命名空间,但是目前这并非出于功能上的目的(仅仅是维持现状来避免非兼容性变更)。
必须注意,不要在不同的无命名空间的模块中定义两个相同的 getter 从而导致错误。
如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced: true
的方式使其成为带命名空间的模块。当模块被注册后,它的所有 getter、action
及mutation 都会自动根据模块注册的路径调整命名
例如:
const moduleA = { namespaced: true, state: {...}, mutations: {...} }
|
此时在文件使用此模块需要带上模块名
this.$store.commit('moduleA/hasLogin',preload)
|