喜欢就关注咱们吧!vue
Vuex 4 已正式发布,此版本的更新重点是提供更好的兼容性。从 release note 能够看到,Vuex 4 不但支持 Vue 3,而且提供与 Vuex 3 彻底相同的 API,所以用户能够在 Vue 3 中重用其现有的 Vuex 代码。webpack
虽然 Vuex 4 将兼容性放在了首位,但此版本依旧包括部分破坏性变化,下边简单介绍一下。git
安装过程已更改github
为了与新的 Vue 3 初始化过程保持一致,Vuex 的安装过程已更改。举个例子,若是须要建立一个新的 store 实例,如今会鼓励用户使用新引入的createStore功能。web
import { createStore } from 'vuex' export const store = createStore({ state() { return { count: 1 } } })
尽管从技术上来说这并非一个破坏性变化,开发者仍可使用new Store(...)语法,但官方表示建议将该方法与 Vue 3 和 Vue Router 4 保持一致。vuex
要将 Vuex 安装到一个 Vue 实例,须要传递实例而非 Vuex。markdown
import { createApp } from 'vue' import { store } from './store' import App from './App.vue' const app = createApp(App) app.use(store) app.mount('#app')
打包与 Vue 3 一致app
新版本会生成如下的包,以与 Vue 3 打包保持一致:ide
vuex.global(.prod).js函数
vuex.esm-browser(.prod).js
vuex.esm-bundler.js
ComponentCustomProperties类型化
Vuex 4 删除其this.$store在 Vue Component 中的全局类型以解决 issue #994。与 TypeScript 一块儿使用时,必须声明本身的模块扩充 (module augmentation)。
将如下代码放在项目中以容许this.$store正确类型化:
// vuex-shim.d.ts import { ComponentCustomProperties } from 'vue' import { Store } from 'vuex' declare module '@vue/runtime-core' { // Declare your own store states. interface State { count: number } interface ComponentCustomProperties { $store: Store<State> } }
从核心模块导出createLogger 函数
在 Vuex 3 中,createLogger函数从vuex/dist/logger中导出,但如今它已包含在核心软件包中。所以应该直接从vuex包中导入。
import { createLogger } from 'vuex'
此外还包括两个 Bugfix:
修复导出缺乏storeKey的错误(4ab2947)