vuex4快速入门

简介: vuex4快速入门

自从 vue2 升级到 vue3 之后,vue-router 从 3.x 升级到了 4.x,vuex 也从 3.x 升级到了 4.x。自从语法发生了较大的变化之后,其他的生态库也必须同步更新了。

现在的 vuex 版本是 4.0.0-rc.2,目前还是预览版本,可以通过下面的命令安装:

npm install vuex@next --save

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。

安装 Vuex 之后,让我们来创建一个 store。创建过程直截了当——仅需要提供一个初始 state 对象和一些 mutation:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

上面代码是 vuex3 版本的形式,而 vuex4 发生了变化:

import { createApp } from 'vue'
import { createStore } from 'vuex'

// 创建 store 容器实例.
const store = createStore({
  state () {
    return {
      count: 0
    }
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

const app = createApp({ /* your root component */ })

// 通过 use 注册插件
app.use(store)

通过对比我们发现,创建 store 之前是通过 new 实例来创建,现在是通过 createStore 这个工厂函数来创建实例,还有就是 use 在使用插件的时候,之前是直接传入 vuex 作为参数,而现在传入的参数是创建出来的实例。

现在,你可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更:

store.commit('increment')

console.log(store.state.count) // -> 1

为了在 Vue 组件中访问 this.$store 属性,你需要为 Vue 实例提供创建好的 store。Vuex 提供了一个从根组件向所有子组件,以 store 选项的方式“注入”该 store 的机制。这是 vuex 3.x 版本的使用方式了,但是升级 vuex 4.x 版本之后不再需要这样做了而是可以直接使用了。

new Vue({
  el: '#app',
  store: store,
}) 

现在我们可以从组件的方法提交一个变更:

methods: {
  increment() {
    this.$store.commit('increment')
    console.log(this.$store.state.count)
  }
}

在 setup() 内部,this 不会是该活跃实例的引用,所以如果是在 setup 函数中,需要使用 useStore 函数。这是一个新增的 API 。

import { useStore } from 'vuex'

export default {
  setup () {
    const store = useStore()
  }
}

State 和 Getters 的用法:

import { computed } from 'vue'
import { useStore } from 'vuex'

export default {
  setup () {
    const store = useStore()

    return {
      // 在 computed 函数中访问一个 state
      count: computed(() => store.state.count),

      // 在 computed 函数中访问一个 getter
      double: computed(() => store.getters.double)
    }
  }
}

Mutations 和 Actions 的用法:

import { useStore } from 'vuex'

export default {
  setup () {
    const store = useStore()

    return {
      // 访问一个 mutation
      increment: () => store.commit('increment'),

      // 访问一个 action
      asyncIncrement: () => store.dispatch('asyncIncrement')
    }
  }
}

组件中通过访问 this.$store 属性可以访问 store 容器,如果使用的是 composition API 使用 useStore 代替即可。

其他的用法和之前大同小异,主要注意上面提到的3个变化。

相关文章
|
搜索推荐 C++ 开发者
VSCode安装使用教程,保姆级!
本文介绍了Visual Studio Code(VS Code)的安装和基本使用,包括从官网下载安装包,按照步骤在Windows系统上安装,以及设置个性化主题。此外,还强调了安装插件以增强功能,例如安装简体中文插件,并展示了如何搜索和安装插件。VS Code作为一个免费、开源的轻量级编辑器,其丰富的扩展性和高效性使其成为开发者工具的首选。
|
JavaScript
3分钟了解 vue props type类型
3分钟了解 vue props type类型
616 0
|
文字识别 Java C++
Tesseract-OCR的简单使用与训练
Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Office Document Imaging(MODI)相比,我们可以不断的训练的库,使图像转换文本的能力不断增强;如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。
6326 0
|
7月前
|
5G 网络架构 UED
网速只拼Mbps?解码网速真相的五大关键因素
Mbps(兆比特每秒)是衡量数据传输速度的单位,表示每秒传输的百万比特数。它是评估网络性能的核心指标,广泛应用于家用宽带、移动网络和企业级网络中。Mbps 数值越高,理论上数据传输越快,但实际体验还受网络拥塞、丢包率和信号强度等因素影响。例如,在网络高峰时段或信号较弱的地方,即使Mbps数值高,也可能出现卡顿。5G和光纤技术显著提升了Mbps速率,但仍需考虑硬件设备如路由器和网卡的性能瓶颈。理解Mbps及其影响因素,有助于用户选择合适的网络服务并优化网络体验。
729 1
|
存储
base64图片是什么?原理是什么?优缺点是什么?
base64图片是什么?原理是什么?优缺点是什么?
701 0
|
并行计算 测试技术 TensorFlow
Transformers 4.37 中文文档(八)(3)
Transformers 4.37 中文文档(八)
534 2
|
Web App开发 JavaScript 前端开发
Vue系列教程(04)- VsCode断点调试(Debugger for Chrome)
Vue系列教程(04)- VsCode断点调试(Debugger for Chrome)
662 0
|
前端开发 JavaScript 开发者
雪碧图:图片合并的艺术!
雪碧图:图片合并的艺术!
|
移动开发 小程序 API
【产品上新】openURL接口开放,实现在小程序与H5之间“反复横跳”
【产品上新】openURL接口开放,实现在小程序与H5之间“反复横跳”
275 1
|
Unix Linux 编译器
C语言中EOF的用法
C语言中EOF的用法
973 0