在开源版本的 mar3d-vue-project 项目中如何集成自己的vuex状态管理呢?这里我来介绍两种方式
    方式一:
    这个项目中已经帮我们引入了vuex,可以在每个页面中直接使用,以example为例,下图可以看到页面目录下存在一个widget-store.js 的文件,本文件可以直接编写vuex相关代码
    image.png

    1. interface State extends WidgetState {
    2. count: number
    3. }
    4. const store: StoreOptions<State> = {
    5. state: {
    6. widgets: [],
    7. openAtStart: [],
    8. count: 1
    9. },
    10. getter: {},
    11. mutations: {
    12. updateCount(state) {
    13. state.count ++
    14. }
    15. },
    16. actions: {}
    17. }

    以上方法虽然方便,但是和项目内部状态使用了同一个命名空间,所以第二种方式,就是创建一个自己单独的vuex命名空间
    方式二:
    在 src/common/store下创建自己的vuex配置,如 my-store.ts

    1. // my-store.ts
    2. import { InjectionKey } from 'vue'
    3. import { createStore, Store } from 'vuex'
    4. // 为 store state 声明类型
    5. export interface State {
    6. count: number
    7. }
    8. // 定义 injection key
    9. export const key: InjectionKey<Store<State>> = Symbol("my-store")
    10. export const myStore = createStore<State>({
    11. state: {
    12. count: 0
    13. },
    14. getter: {},
    15. mutations: {
    16. updateCount(state) {
    17. state.count ++
    18. }
    19. },
    20. actions: {}
    21. })

    然后在main.ts中注册

    1. // main.ts
    2. import { myStore, key as myKey /* 取一个别名,防止变量冲突 */ } from "@/common/store/my-store.js"
    3. app.use(myStore, myKey)

    使用时只需要通过自己的命名空间标识 key 来获取store对象就可以了

    1. import { useStore } from 'vuex'
    2. import { key } from './store'
    3. const store = useStore(key)

    以上就是在 mars3d基础项目中使用vuex的简单演示,大家可以根据自己项目的具体需求灵活选择