在 vuex 4.x 中使用 `useStore` API

sil*_*ilk 3 javascript vue-component vuex vuejs3 vue-composition-api

  1. 按照官方的例子导出自己的useStore,然后在组件中使用。
import { createStore, Store,  useStore as baseUseStore } from 'vuex';

export const key: InjectionKey<Store<RootState>> = Symbol();

export function useStore() {
  return baseUseStore(key);
}
Run Code Online (Sandbox Code Playgroud)

在组件中使用

setup() {
  const store = useStore();
  const onClick = () => {
    console.log(store)
    store.dispatch('user/getUserInfo');
  }
  return {
    onClick,
  }
},
Run Code Online (Sandbox Code Playgroud)
  1. 运行后,store未定义。
  2. 我在methods属性中使用时可以正常获取
methods: {
  login() {
    this.$store.dispatch('user/getToken')
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么?如何修复它

Dan*_*Dan 5

在那个简化的useStore使用教程中,您仍然需要像他们一样在main.ts 中注册store和。如果你不这样做,你将得到 undefined :key

// main.ts
import { store, key } from './store'

const app = createApp({ ... })

// pass the injection key
app.use(store, key)
Run Code Online (Sandbox Code Playgroud)

原因是baseUseStore(key)在完成之前没有任何意义。