Vuex 4.0 正式发布!新年,官方生态齐聚一堂。

Vuex 4 官方版本正式发布。

Vuex 4 的重点是兼容性。Vuex 4 支持 Vue 3,但是仍然提供了与 Vuex 3 完全相同的 API,因此用户可以在 Vue 3 中直接复用他们现有的 Vuex 代码。

下文会把破坏性的改动列出来,请注意查看。

在源码的 example 文件夹[1]可以看到 Optional 和 Composition API 下的基本用法。

它仍然和 Vue 3 一样在 NPM 包的 next 标签下发布,我们计划在 Vue3 准备好的时候移除 next 标签。

为了 Vuex 4 的稳定发布,大家齐心协力做出了很多贡献。非常感谢你们的帮助。若不是有如此出色的 Vue 社区,根本不可能实现这一切!

文档

请访问 next.vuex.vuejs.org[2] 查看文档。

破坏性变动

安装流程更改

为了和 Vue3 的初始化流程一致,Vuex 的安装流程有所改动。

我们建议用户用新的 createStore 函数来建立一个 store 实例。

import { createStore } from "vuex";

export const store = createStore({
  state() {
    return {
      count: 1,
    };
  },
});

同时这在技术上并不是一个破坏性的改动,你依然可以用 new Store(...) 语法,不过我们推荐你用新语法,这样可以和 Vue3 以及 Vue Router 4 保持一致。

在 Vue 实例上安装 Vuex,传递 store 即可。

import { createApp } from "vue";
import { store } from "./store";
import App from "./App.vue";

const app = createApp(App);

app.use(store);

app.mount("#app");

构建产物和 Vue3 一致

以下的构建产物可以和 Vue3 的产物保持一致:

  • vuex.global(.prod).js

    • 直接在浏览器中使用 <script src="...">,暴露全局 Vuex 变量。

    • 全局构建会被打包成 IIFE,并不是 UMD,仅用于直接使用 <script src="..."> 引入。

    • 包含了硬编码的 prod/dev 分支判断,prod.js 是压缩后的,在生产环境记得使用这个文件。

  • vuex.esm-broswer(.prod).js

    • 为了使用 native ES module imports(需要浏览器支持 es module 用法,<script type="module">

  • vuex.esm-bundler.js

    • 为了通过 webpack, rollup, percel 等构建工具使用模块。

    • 保留 prod/dev 分支判断和 process.env.NODE_ENV 判断(这个变量需要被构建工具替换)

    • 并不会提供 minified 版本(构建工具可以引入后一起处理)

  • vuex.cjs.js

    • 为了使用 Node.js 服务端渲染时通过 require() 导入。

类型 ComponentCustomProperties

Vuex 4 移除了为了推导 this.$store 而编写的全局类型,解决了 issue #994[3],在使用 TypeScript 时,你必须自己手动添加模块类型声明。

在项目中使用如下的代码,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 中导出,现在它被包含在核心包中了,你可以直接这样导入:

import { createLogger } from "vuex";

自 4.0.0-rc.2 以来的 Bug 修复

  • 未导出 storeKey(4ab2947[4])

  • 修复 webpack 中 tree shaking 未生效 (#1906[5]) (#1907[6]) (aeddf7a[7])

原文发布地址

https://github.com/vuejs/vuex/releases/tag/v4.0.0

参考资料

[1]

源码的 example 文件夹: https://github.com/vuejs/vuex/tree/v4.0.0/examples

[2]

next.vuex.vuejs.org: https://next.vuex.vuejs.org/

[3]

issue #994: https://github.com/vuejs/vuex/issues/994

[4]

4ab2947: https://github.com/vuejs/vuex/commit/4ab294793a2c20ea6040f01f316618682df61fff

[5]

#1906: https://github.com/vuejs/vuex/issues/1906

[6]

#1907: https://github.com/vuejs/vuex/issues/1907

[7]

aeddf7a: https://github.com/vuejs/vuex/commit/aeddf7a7c618eda7f316f8a6ace8d21eb96c29ff

推荐阅读

若川知乎高赞:有哪些必看的 JS库?
我在阿里招前端,我该怎么帮你?(现在还可以加模拟面试群)

如何拿下阿里巴巴 P6 的前端 Offer
如何准备阿里P6/P7前端面试--项目经历准备篇
大厂面试官常问的亮点,该如何做出?
如何从初级到专家(P4-P7)打破成长瓶颈和有效突破
若川知乎问答:2年前端经验,做的项目没什么技术含量,怎么办?

末尾

你好,我是若川,江西人,历时一年只写了一个学习源码整体架构系列~(点击蓝字了解我)

  1. 关注若川视野,回复"pdf" 领取优质前端书籍pdf,回复"1",可加群长期交流学习

  2. 我的博客地址:https://lxchuan12.gitee.io 欢迎收藏

  3. 觉得文章不错,可以 分享、点赞、在看 呀^_^另外欢迎留言交流~

小提醒:若川视野公众号面试、源码等文章合集在菜单栏中间【源码精选】按钮,欢迎点击阅读,也可以星标我的公众号,便于查找

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值