当前位置:首页 > VUE

vue实现store

2026-02-09 22:17:27VUE

Vue 实现 Store 的方法

Vue 中实现 Store 通常用于状态管理,以下是几种常见的方法:

使用 Vuex

Vuex 是 Vue 官方推荐的状态管理库,适用于大型应用。

  1. 安装 Vuex:

    npm install vuex --save
  2. 创建 Store 文件(如 store/index.js):

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        increment(state) {
          state.count++
        }
      },
      actions: {
        increment({ commit }) {
          commit('increment')
        }
      },
      getters: {
        doubleCount(state) {
          return state.count * 2
        }
      }
    })
  3. main.js 中引入 Store:

    import store from './store'
    
    new Vue({
      store,
      render: h => h(App)
    }).$mount('#app')
  4. 在组件中使用:

    this.$store.state.count
    this.$store.commit('increment')
    this.$store.dispatch('increment')
    this.$store.getters.doubleCount

使用 Composition API 实现简易 Store

对于小型应用,可以直接使用 Vue 3 的 Composition API 实现简易 Store。

  1. 创建 store.js

    vue实现store

    import { reactive } from 'vue'
    
    export const store = reactive({
      count: 0,
      increment() {
        this.count++
      }
    })
  2. 在组件中使用:

    import { store } from './store'
    
    export default {
      setup() {
        return { store }
      }
    }

使用 Pinia

Pinia 是 Vue 官方推荐的下一代状态管理库,比 Vuex 更简洁。

  1. 安装 Pinia:

    npm install pinia
  2. 创建 Store(如 stores/counter.js):

    import { defineStore } from 'pinia'
    
    export const useCounterStore = defineStore('counter', {
      state: () => ({
        count: 0
      }),
      actions: {
        increment() {
          this.count++
        }
      },
      getters: {
        doubleCount: (state) => state.count * 2
      }
    })
  3. main.js 中引入:

    vue实现store

    import { createPinia } from 'pinia'
    
    const pinia = createPinia()
    app.use(pinia)
  4. 在组件中使用:

    import { useCounterStore } from '@/stores/counter'
    
    const counter = useCounterStore()
    counter.count
    counter.increment()
    counter.doubleCount

使用 provide/inject 实现全局状态

适用于需要跨组件共享状态的场景。

  1. 创建全局状态:

    import { reactive, provide, inject } from 'vue'
    
    const stateSymbol = Symbol('state')
    
    export const provideState = () => {
      const state = reactive({
        count: 0,
        increment() {
          state.count++
        }
      })
      provide(stateSymbol, state)
    }
    
    export const useState = () => {
      const state = inject(stateSymbol)
      if (!state) throw new Error('State not provided')
      return state
    }
  2. 在根组件提供状态:

    import { provideState } from './state'
    
    export default {
      setup() {
        provideState()
      }
    }
  3. 在子组件中使用:

    import { useState } from './state'
    
    export default {
      setup() {
        const state = useState()
        return { state }
      }
    }

选择建议

  • 大型应用:推荐使用 Vuex 或 Pinia
  • 小型应用:Composition API 或 provide/inject
  • 新项目:优先考虑 Pinia

标签: vuestore
分享给朋友:

相关文章

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue实现hovuer

vue实现hovuer

Vue 实现 Hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 直接控制 通过 :hover 伪类实现,无需额外的 JavaScri…

vue实现ide

vue实现ide

Vue 实现 IDE 的基本思路 使用 Vue 构建一个简易的集成开发环境(IDE)需要整合代码编辑器、文件管理、终端模拟等功能。以下是关键实现步骤和推荐工具。 核心功能模块 代码编辑器 使…

vue源码实现

vue源码实现

Vue 源码实现解析 Vue.js 的核心实现可以分为响应式系统、虚拟 DOM、模板编译、组件化等几个关键部分。以下是对这些核心机制的详细解析。 响应式系统 Vue 的响应式系统基于 Object…

vue实现门户

vue实现门户

Vue 实现门户网站的关键步骤 搭建基础框架 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理多页面路由。门户通常需要响应式布局,可引入 UI 库如 Element P…