vue3单独讲store的action封装不起作用?

lib.ts:
import { Store, useStore } from 'vuex';export const getLang = (): ComputedRef<SupportLanguageType> => {
    const store: Store<RootState> = useStore();
    return computed(() => store.state.language);
};
export const toogleMenu = async (status?: boolean): Promise<void> => {
    const store: Store<RootState> = useStore();
    return store.dispatch('toogleSideShrink', status);
};
test.vue:
<button @click="toogleMenu">{{ language }}</button><script lang="ts">
import { defineComponent } from 'vue';
import { getLang, toogleMenu } from './lib';
export default defineComponent({
    setup() {
        return {
            language: getLang(),
            toogleMenu
        };
    }
});
</script>
language的获取没有问题,也会跟着store里面的数据变化,但是toogleMenu方法点击就报store是undefined,就很好奇为啥,感觉与响应式和vue生命周期有关系,但是试了很多办法都不行,感觉dispatch不能单独使用,只能这么写:
// test.vueexport default defineComponent({
    setup() {
        const store: Store<RootState> = useStore();
        const toogleMenu = (status?: boolean) => store.dispatch('toogleSideShrink', status);
        return {
            language: getLang(),
            toogleMenu
        };
    }
});
或者
// lib.tsexport const toogleMenu = {
    methods: {
        async toogleMenu(status?: boolean): Promise<void> {
            // eslint-disable-next-line @typescript-eslint/ban-ts-comment
            //@ts-ignore
            return await this.$store.dispatch('toogleSideShrink', status);
        }
    }
};
// test.vue
export default defineComponent({
    mixins: [toogleMenu],
    setup() {
        return {
            language: getLang()
        };
    }
});
有知道的大神能解释一下不o( ̄︶ ̄)o
回答:
看不懂为什么要这么写,是因为ts引用很麻烦吗?第一个应该直接定义getters,第二个是因为上下文关系的原因,可以再包一层,在setup里执行返回一个方法进行绑定。
推荐使用const store = inject('store')
想要更简单使用的vuex实现类型提示,请看我发布的文章!
以上是 vue3单独讲store的action封装不起作用? 的全部内容, 来源链接: utcz.com/p/936162.html


