当前位置:   article > 正文

vue2和vue3中vuex的区别和使用方法详解?_vuex在vue2中的使用和vue3中的使用有什么不一样

vuex在vue2中的使用和vue3中的使用有什么不一样

前言:

Vue.js 是一款流行的前端框架,它提供了 Vuex 管理应用的全局状态。在 Vue 2 和 Vue 3 中,Vuex 的使用方法有些区别

一、Vue 2 中的 Vuex


1.安装和配置

在 Vue 2 中,安装 Vuex 可以使用 npm 或 yarn 命令:

  1. npm install vuex --save
  2. # 或者
  3. yarn add vuex

安装完成后需要在 main.js 中进行配置:

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)

2.创建 Store

创建一个 Vuex store 实例可以使用以下方式:

  1. const store = new Vuex.Store({
  2. state: {
  3. count: 0
  4. },
  5. mutations: {
  6. increment(state) {
  7. state.count++
  8. }
  9. },
  10. actions: {
  11. incrementAsync({ commit }) {
  12. setTimeout(() => {
  13. commit('increment')
  14. }, 1000)
  15. }
  16. },
  17. getters: {
  18. doubleCount(state) {
  19. return state.count * 2
  20. }
  21. }
  22. })

Store 是一个对象,包含了应用中所有的状态(state)、修改状态的方法(mutations)、异步操作方法(actions)和计算属性(getters)等内容。

3.在组件中使用

在组件中使用 Vuex 的状态和方法,需要使用 computed 属性或者 methods 属性来获取或触发 Vuex 中的状态和方法:

  1. <template>
  2.     <div>
  3.         <p>Count: {{ $store.state.count }}</p>
  4.         <button @click="$store.commit('increment')">Increment</button>
  5.         <button @click="incrementAsync">Increment Async</button>
  6.         <p>Double Count: {{ doubleCount }}
  7.         </p>
  8.     </div>
  9. </template>
  10. <script>
  11. export default {
  12. computed: {
  13. doubleCount() {
  14. return this.$store.getters.doubleCount
  15. }
  16. },
  17. methods: {
  18. incrementAsync() {
  19. this.$store.dispatch('incrementAsync')
  20. }
  21. }
  22. }
  23. </script>

其中,$store.state.count 获取状态值,$store.commit('increment') 调用 mutation 修改状态,$store.getters.doubleCount 计算属性获取新的状态值,$store.dispatch('incrementAsync') 触发 action 执行异步操作。

二、Vue 3 中的 Vuex


在 Vue 3 中,Vuex 也有了一些改变

1.安装和配置

在 Vue 3 中,安装 Vuex 也可以使用 npm 或 yarn 命令:

  1. npm install vuex@next --save
  2. # 或者
  3. yarn add vuex@next

安装完成后同样需要在 main.js 中进行配置:

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import store from './store'
  4. createApp(App).use(store).mount('#app')

之后就可以在组件中使用 Vuex 了。

2.创建 Store

在 Vue 3 中,创建一个 Vuex Store 的方式与 Vue 2 相似:

  1. import { createStore } from 'vuex'
  2. const store = createStore({
  3. state() {
  4. return {
  5. count: 0
  6. }
  7. },
  8. mutations: {
  9. increment(state) {
  10. state.count++
  11. }
  12. },
  13. actions: {
  14. incrementAsync({ commit }) {
  15. setTimeout(() => {
  16. commit('increment')
  17. }, 1000)
  18. }
  19. },
  20. getters: {
  21. doubleCount(state) {
  22. return state.count * 2
  23. }
  24. }
  25. })
  26. export default store

3.在组件中使用

在 Vue 3 中,组件中再也不需要使用 this.$store 方法来获取 Vuex 的状态和方法了。而是使用 import { useStore } from 'vuex' 在组件中引入 Vuex 的 store 对象,并通过调用 useStore() 来访问 store 的状态和方法:

  1. <template>
  2. <div>
  3. <p>Count: {{ count }}</p>
  4. <button @click="increment">Increment</button>
  5. <button @click="incrementAsync">Increment Async</button>
  6. <p>Double Count: {{ doubleCount }}</p>
  7. </div>
  8. </template>
  9. <script>
  10. import { useStore } from 'vuex'
  11. export default {
  12. setup() {
  13. const store = useStore()
  14. const count = computed(() => store.state.count)
  15. const increment = () => store.commit('increment')
  16. const incrementAsync = () => store.dispatch('incrementAsync')
  17. const doubleCount = computed(() => store.getters.doubleCount)
  18. return {
  19. count,
  20. increment,
  21. incrementAsync,
  22. doubleCount
  23. }
  24. }
  25. }
  26. </script>

总结:

在 Vue 2中,组件中需要使用 $store 方法来获取 Vuex 的状态和方法了。而vue3是使用 import { useStore } from 'vuex' 在组件中引入 Vuex 的 store 对象,并通过调用 useStore() 来访问 store 的状态和方法,通过对比我们可以看出,在 Vue 3 中的使用方式更接近于 React Hooks 的形式,具有更好的可维护性和扩展性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/190923
推荐阅读
相关标签
  

闽ICP备14008679号