vue~vuex的使用

存储相关

Vuex 和本地存储(如localStorage)以及 cookie 存储(如 document.cookie)之间有一些关系,但它们是不同的概念,用于不同的目的。

  1. Vuex

    • Vuex 是 Vue.js 的官方状态管理库,用于在 Vue.js 应用程序中管理应用程序的全局状态。
    • Vuex 主要用于在前端应用程序中存储和管理各种状态,包括用户信息、应用程序配置、数据缓存等。它提供了一个中心化的状态存储机制,可以让不同组件之间共享和同步状态。
    • Vuex 的数据存储在内存中,通常不会持久化到硬盘上。
  2. 本地存储(localStorage)

    • localStorage 是浏览器提供的一种本地存储机制,允许你将数据以键值对的形式存储在浏览器中,数据可以在不同页面和会话之间保持持久性。
    • localStorage 主要用于在浏览器中存储小量的数据,如用户配置、用户首选项、临时会话数据等。它是一个简单的持久化数据存储工具。
  3. Cookie 存储

    • cookie 是另一种在浏览器中存储数据的方式,但它通常用于存储小的文本数据,如用户身份验证令牌、会话标识等。
    • cookie 具有一些限制,如每个 cookie 的大小限制和安全性考虑,因此不适合用于存储大量数据或敏感信息。

关系和用途:

  • Vuex 可以与本地存储和 cookie 存储结合使用,以实现更复杂的状态管理和数据持久化。例如,你可以将某些重要的应用程序状态存储在 Vuex 中,同时将用户首选项或会话令牌等数据存储在 localStoragecookie 中。
  • Vuex 可以使用 localStorage 或其他存储机制来实现状态的持久化,以便在页面刷新或重新加载时保持应用程序状态不变。这通常涉及到将状态数据从 Vuex 存储到 localStorage 中,并在应用程序初始化时从 localStorage 恢复状态。

需要注意的是,存储敏感信息(如用户密码)通常不应存储在本地存储或 cookie 中,而应使用更安全的方式,如后端服务器的会话管理或令牌验证。存储在本地的数据应该是非敏感的,并经过适当的加密和安全性处理。

基本属性

Vuex 是 Vue.js 的官方状态管理库,用于在Vue.js应用程序中管理应用程序的全局状态。Vuex.StoreVuex 的核心部分之一,它包含了状态(state)、变化状态的方法(mutations)、触发状态变化的方法(actions)以及获取状态的方法(getters)。

Vuex.Store 中,statemutations 分别用于存储和修改应用程序的状态。

  1. state(状态)state 是应用程序的数据源。它是一个普通的 JavaScript 对象,包含了应用程序的全局状态数据。通过访问 state,你可以获取应用程序的当前状态信息。例如:

    const store = new Vuex.Store({
      state: {
        count: 0
      }
    })
    

    在上面的示例中,state 包含一个名为 count 的状态属性,初始值为 0。

  2. mutations(变化)mutations 是用来修改 state 的方法。它们是同步的函数,每个 mutation 接收一个当前状态的参数(state)和一个用于更新状态的参数(通常称为 payload)。mutations 的主要作用是确保状态变更的可追踪性,因为每个状态的变更都必须经过一个明确的步骤。例如:

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

    在上面的示例中,我们定义了两个 mutations,分别用于增加和减少 count 状态的值。要触发这些 mutations,你可以通过 store.commit 方法来调用它们:

    store.commit('increment') // 增加 count
    store.commit('decrement') // 减少 count
    

    通过使用 commit 方法,你可以确保在应用程序的状态发生变化时进行跟踪和记录。

总之,Vuex.Store 中的 state 用于存储应用程序的全局状态,而 mutations 用于定义可追踪的方法,用于修改状态。这种明确的状态管理方式有助于在大型应用程序中更好地管理和维护状态。

actions和getters

当使用 Vuex 进行状态管理时,除了 statemutations,还有 actionsgetters 来进一步组织和管理你的应用程序的状态。

  1. Actions(动作)

    • Actions 是用于处理异步操作和业务逻辑的地方。它们可以包含任何 JavaScript 代码,并且可以触发 mutations 来修改 state

    • Actions 是通过 store.dispatch 方法来触发的,可以接受一个对象参数,其中包含要传递给 mutation 的数据。这样可以将异步操作和数据获取与 mutations 分离开来,使代码更具可维护性。

    示例:

    const store = new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        increment(state) {
          state.count++
        }
      },
      actions: {
        asyncIncrement(context) {
          setTimeout(() => {
            context.commit('increment') // 触发 mutation 增加 count
          }, 1000)
        }
      }
    })
    
    // 在组件中触发 action
    store.dispatch('asyncIncrement') // 1 秒后增加 count
    
  2. Getters(获取器)

    • Getters 用于从 state 中派生出一些衍生状态或者进行一些计算。它们允许你在组件中获取并使用派生的状态,而不需要在组件内部重复相同的计算逻辑。

    • Getters 定义为一个函数,接受 state 作为参数,可以返回根据 state 计算得出的新状态。

    示例:

    const store = new Vuex.Store({
      state: {
        items: [
          { id: 1, name: 'Item 1', price: 10 },
          { id: 2, name: 'Item 2', price: 20 },
          { id: 3, name: 'Item 3', price: 30 }
        ]
      },
      getters: {
        totalPrice(state) {
          return state.items.reduce((total, item) => total + item.price, 0)
        }
      }
    })
    
    // 在组件中使用 getter
    const total = store.getters.totalPrice // 获取总价格,值为 60
    

    在上面的示例中,totalPrice 是一个 getter,它计算了所有商品的总价格。通过使用 getter,你可以在组件中轻松地获取这个派生的状态,而不必在每个组件中都重新计算。

总之,actions 用于处理异步操作和业务逻辑,而 getters 用于派生状态或进行计算,它们都有助于更好地组织和管理 Vuex 应用程序的状态。

vuex中的dispatch

dispatch 是 Vuex 中用于触发一个 action 的方法。action 是用于处理异步操作和业务逻辑的一种机制,它可以包含任何 JavaScript 代码,并且可以触发 mutation 来修改 state

使用 dispatch 方法可以在组件中触发一个 action,并传递一些参数给该 action。在 action 内部,你可以执行异步操作,例如发送网络请求、处理数据,然后在需要时触发相关的 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++;
    },
  },
  actions: {
    asyncIncrement(context) {
      // 模拟异步操作,例如发送网络请求
      setTimeout(() => {
        context.commit('increment'); // 触发 mutation 增加 count
      }, 1000);
    },
  },
});

// 在组件中触发 action
store.dispatch('asyncIncrement'); // 1 秒后增加 count

在上面的示例中,我们创建了一个名为 asyncIncrementaction,它包含了一个异步的 setTimeout 操作。当调用 store.dispatch('asyncIncrement') 时,它会在一秒后触发 increment mutation 来增加 count。这样,我们就可以使用 dispatch 方法来触发异步操作,并在操作完成后更新应用程序的状态。

总之,dispatch 方法是用于触发 Vuex 中的 action 的工具,它允许你在组件中进行异步操作,并与应用程序的状态进行交互。这有助于更好地管理和组织 Vuex 应用程序中的业务逻辑。