Vue的状态管理vuex使用方法详解

Vue的状态管理vuex使用方法详解

Vue.js 是一套前端实现 MVVM 模式的框架,而 Vuex 是基于 Vue 构建的专门为大型应用程序开发的状态管理模式和库。Vuex 状态管理的核心是使用一个全局 store 单位化管理所有的组件之间共享的状态。本篇文章将详细讲解 Vuex 的使用方法。

安装 Vuex

安装 Vuex 可以通过 npm 、yarn 、cdn 或直接在 js 文件中引入等方式。

通过 npm 安装:

npm install vuex --save

通过 yarn 安装:

yarn add vuex

通过 CDN 直接引入:

<script src="https://unpkg.com/vuex@x.x.x/dist/vuex.js"></script>

使用 Vuex

使用 Vuex 的第一步,是创建一个全局唯一的 Store 对象。Store 对象中包含了应用中所有的状态 state 、派发的 mutations 、行为的 action 、和获取状态的 getters 。其具体实现步骤如下:

  1. 创建一个全局唯一的 Store 对象
// store.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++;
    }
  }
});
  1. 在创建 Vue 根实例时,将 Store 对象作为选项属性传递给 Vue 根实例。
// main.js
import Vue from "vue";
import App from "./App.vue";
import store from "./store";

new Vue({
  el: "#app",
  store,
  render: h => h(App)
});
  1. 访问状态 state 和操作状态 mutations
// App.vue
<script>
export default {
  computed: {
    count() {
      return this.$store.state.count;
    }
  },
  methods: {
    increment() {
      this.$store.commit("increment");
    }
  }
}
</script>

以上是简单的 Vuex 应用示例,下面将分别详细讲解状态、Mutation、Action、Getter。

状态 (State)

Vuex 中的状态存储仓库(store)和 Vue 实例有所不同。store就像一个存储库,它包含了整个应用的状态。这个状态是响应式的,即当其发生变化时,Vue.js 帮您更新视图。我们可以将状态想象成一个仓库,它包含了整个应用的数据。声明并且初始化状态如下:

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

如上面代码所示,在 state 中定义了一个 count 状态。

Mutations

Mutation 是 Vuex 中的原子操作,其接收 state 作为第一个参数,并且可以接收额外的参数。其核心作用是用来更新 Vuex 中 store 的 state 当前状态。其主要步骤如下:

  1. Mutations 类型常量
export const ADD_TODO = "ADD_TODO";
  1. 定义 mutations 函数
mutations: {
    [ADD_TODO](state, { todo }) {
      state.todos.push(todo);
    }
}
  1. 提交 mutations 来更新状态
this.$store.commit(ADD_TODO, { todo: { text: "New Todo" } });

如此,状态已更新。

Action

Action 是 Vuex 中用于提交 mutation 的异步事件,其中可以包含任意异步操作。其核心作用是处理异步操作,并且通过提交 mutations 事件来更新状态。实现步骤如下:

  1. 异步事件
import axios from "axios";

export const FETCH_TODOS_BEGIN = "FETCH_TODOS_BEGIN";
export const FETCH_TODOS_SUCCESS = "FETCH_TODOS_SUCCESS";
export const FETCH_TODOS_FAILURE = "FETCH_TODOS_FAILURE";

export function fetchTodos() {
  return dispatch => {
    dispatch(fetchTodosBegin());
    return axios
      .get("https://jsonplaceholder.typicode.com/todos")
      .then(response => {
        dispatch(fetchTodosSuccess(response.data));
        return response.data;
      })
      .catch(error => dispatch(fetchTodosFailure(error)));
  };
}

export const fetchTodosBegin = () => ({
  type: FETCH_TODOS_BEGIN
});

export const fetchTodosSuccess = todos => ({
  type: FETCH_TODOS_SUCCESS,
  payload: { todos }
});

export const fetchTodosFailure = error => ({
  type: FETCH_TODOS_FAILURE,
  payload: { error }
});
  1. 提交 action 来调用异步事件
this.$store
  .dispatch(fetchTodos)
  .then(() => {
    console.log(this.$store.todos);
  })
  .catch(error => {
    console.error(error);
  });

如此,异步事件和状态已更新。

Getter

Getter 是 Vuex 中用于处理 state 的计算属性。Getter 将一个 state 对象作为第一参数,接收 Getter 方法作为第二个参数,并返回状态的计算结果。其主要步骤如下:

  1. Getter 计算函数
export const getVisibleTodos = (state, filter) => {
  const todos = state.todos.filter(todo => todo.completed !== filter);
  return todos;
};
  1. 使用 Getter 函数
computed: {
  visibleTodos() {
    return this.$store.getters.getVisibleTodos(this.filter);
  }
}

如此,state 对象的计算结果已获取到。

本篇文章主要介绍了 Vuex 的状态管理方法,包括如何定义状态(State)、原子操作(Mutation)、异步操作(Action)和计算属性(Getter),抛砖引玉,希望能为 Vue 使用者带来帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue的状态管理vuex使用方法详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue-router的使用和出现空白页,路由对象属性详解

    Vue-router是Vue.js官方的路由管理器,可以快速地搭建单页面应用程序(SPA),并提供了丰富的导航解决方案。 Vue-router的使用 1. 安装和引入 安装Vue-router可以使用npm或yarn,在项目目录下运行以下命令: npm install vue-router 安装完成后,在项目中引入Vue-router: import Vue…

    Vue 2023年5月28日
    00
  • vue中使用file-saver导出文件的全过程记录

    下面我将为您详细讲解在Vue中使用file-saver导出文件的全过程记录。 1. 安装file-saver 首先需要安装file-saver依赖库,可以使用npm进行安装: npm install file-saver –save-dev 2. 创建可导出的文件 创建一个用于导出的文件,例如 exportFile.js。在该文件中使用file-saver…

    Vue 2023年5月27日
    00
  • vue-calendar-component 封装多日期选择组件的实例代码

    那么我们开始讲解“vue-calendar-component 封装多日期选择组件的实例代码”的攻略。 1. 简介 vue-calendar-component 是一个基于 Vue 的日历组件,支持单选、范围选择、多选等模式,还支持设置日期限制、自定义样式等功能。它的代码托管在 Github 上,并提供了详细的文档与示例。 2. 安装与使用 通过 npm 安…

    Vue 2023年5月29日
    00
  • 利用vuex-persistedstate将vuex本地存储实现

    利用 vuex-persistedstate 可以将 Vuex 状态持久化到本地存储中,目的是为了在页面刷新后还能够保持之前的状态。下面是 vuex-persistedstate 的完整攻略: 安装 在项目目录下执行以下命令安装 vuex-persistedstate: npm install vuex-persistedstate –save 引入 在您…

    Vue 2023年5月27日
    00
  • vue中的render函数、h()函数、函数式组件详解

    Vue中的render函数 Vue中的render函数是一个函数式的组件,它可以将一个虚拟的DOM节点渲染成实际的DOM节点。 在Vue2.x版本中,我们可以使用两种方式来创建组件:使用template或者使用render函数。 render函数是一个函数,它接收一个createElement函数作为参数,用来创建虚拟的DOM节点,然后返回这个节点,用来渲染…

    Vue 2023年5月27日
    00
  • 解决element DateTimePicker+vue弹出框只显示小时

    要解决element DateTimePicker+vue弹出框只显示小时的问题,可以按照以下步骤操作: 1. 引用element-ui库和相关组件 首先,在Vue项目中引入element-ui库,并按需引入DatetimePicker组件。 <template> <div> <el-date-picker v-model=&q…

    Vue 2023年5月29日
    00
  • vue发送websocket请求和http post请求的实例代码

    我来帮你讲解一下。 发送websocket请求 在Vue中,我们可以使用vue-websocket库来实现对Websocket的使用。首先,在项目中安装vue-websocket库: npm install vue-websocket –save 接下来,在Vue实例中,我们需要使用mixins来引入websocket相关配置,并且在钩子函数中绑定事件和发…

    Vue 2023年5月28日
    00
  • 详解vue-cli多页面工程实践

    详解vue-cli多页面工程实践 简介 在实际项目中,往往需要构建多页应用来满足不同的功能需求。本文将详细介绍如何使用vue-cli构建多页应用。 准备工作 安装node.js 安装vue-cli 创建工程 打开终端,执行以下命令来创建vue-cli的多页应用工程: vue init webpack my-project 这里将工程命名为my-project…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部