vuex useStore() 始终返回undefined

发布于 2022-09-12 22:45:42 字数 1184 浏览 13 评论 0

版本信息

  • "vue": "^3.0.0",
  • "vue-router": "^4.0.0-0",
  • "vuex": "^4.0.0-0"
  • "typescript": "~3.9.3"

问题描述

利用@vue/cli 创建的vue3+ts项目中, 调用 vuex 4提供的useStore()方法,始终返回undefined

这是我的代码

hook 定义
export interface IUseTodo {
    setTodo: (value: string) => void;
}

export function useTodo(): IUseTodo {
    const store: Store<any> = useStore();
    console.log("################",store)
    const setTodo = function (value: string) {
        const todo: ITodo = {
            id: new Date().getTime(),
            content: value,
            status: TODO_STATUS.DOING
        };
        store.dispatch(SET_TODO, todo);
    }
    return {
        setTodo
    }
}
使用hook
export default defineComponent({
  name: "TodoInput",
  components: {},
  setup() {
    const todoVal = ref("");
    const handleSetTodo = () => {
      if (!todoVal.value.trim().length) return;
      const { setTodo } = useTodo();
      setTodo("hello world");
      todoVal.value = "";
    };
    return {
      todoVal,
      handleSetTodo
    };
  }
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

[浮城] 2022-09-19 22:45:42

useStore()方法并不是在任何时机下都可以执行,需要保证useStore在setUp 执行时执行

夜空下最亮的亮点 2022-09-19 22:45:42

你是不是少了从vuex中引入这个方法?

  import { useStore } from 'vuex'
一杆小烟枪 2022-09-19 22:45:42

考虑使用mixins试试,看你能不能接受,我也遇到了这个问题

export const useTodoMethod= {
    methods: {
        useTodo(): IUseTodo {
            // eslint-disable-next-line @typescript-eslint/ban-ts-comment
            //@ts-ignore
            return this.$store...;
        }
    }
};

export default defineComponent({
  mixins: [useTodoMethod], 
  ... 
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文