Vuex 入门教程

yizhihongxing

Vuex 入门教程

什么是 Vuex?

Vuex 是一个专为 Vue.js 设计的状态管理库。它能以一种可预测的方式管理应用的状态,并使得视图和状态之间的关系更加简单明了。

Vuex 核心概念

State

Vuex 使用单一状态树,即用一个对象包含了全部的应用层级状态。

一个简单的例子:

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

其中 count 就是我们的应用状态,通过 this.$store.state.count 可以访问该状态。

Getter

Getter 可以看做是 store 的计算属性,如果一个状态的值依赖于多个状态,可以用 Getter 来计算。

一个简单的例子:

const store = new Vuex.Store({
  state: {
    todos: [
      { id: 1, task: 'todo1', done: false },
      { id: 2, task: 'todo2', done: true },
      { id: 3, task: 'todo3', done: false }
    ]
  },
  getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
    }
  }
})

其中 doneTodos 就是我们的 Getter,通过 this.$store.getters.doneTodos 可以访问该计算属性。

Mutation

Mutation 是改变状态的唯一途径,但它必须是同步的方式,任何异步操作都必须放在 Action 中。

一个简单的例子:

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

其中 increment 就是我们的 Mutation,通过 this.$store.commit('increment') 可以调用该 Mutation。

Action

Action 可以看做是对 Mutation 的封装,它可以执行异步操作,并调用多个 Mutation,可以指定异步操作执行成功后调用的 Mutation。

一个简单的例子:

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    increment (context) {
      setTimeout(() => {
        context.commit('increment')
      }, 1000)
    }
  }
})

其中 increment 就是我们的 Action,通过 this.$store.dispatch('increment') 可以调用该 Action。

Vuex 完整示例

以下是一个完整的 TodoList 应用示例,它包含了 Vuex 的所有核心概念。

<template>
  <div>
    <h1>TodoList</h1>
    <input type="text" v-model="newTodo">
    <button @click="addTodo">Add Todo</button>
    <ul>
      <li v-for="todo in filteredTodos" :key="todo.id">
        <input type="checkbox" v-model="todo.done">
        {{ todo.task }}
      </li>
    </ul>
    <h2>Completed todos</h2>
    <ul>
      <li v-for="todo in doneTodos" :key="todo.id">
        {{ todo.task }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  computed: {
    filteredTodos () {
      return this.$store.getters.filteredTodos
    },
    doneTodos () {
      return this.$store.getters.doneTodos
    }
  },
  methods: {
    addTodo () {
      this.$store.dispatch('addTodo', this.newTodo)
      this.newTodo = ''
    }
  },
  data () {
    return {
      newTodo: ''
    }
  }
}
</script>
const store = new Vuex.Store({
  state: {
    todos: [
      { id: 1, task: 'todo1', done: false },
      { id: 2, task: 'todo2', done: true },
      { id: 3, task: 'todo3', done: false }
    ]
  },
  getters: {
    filteredTodos (state) {
      return state.todos.filter(todo => !todo.done)
    },
    doneTodos (state) {
      return state.todos.filter(todo => todo.done)
    }
  },
  mutations: {
    addTodo (state, newTodo) {
      state.todos.push({
        id: state.todos.length + 1,
        task: newTodo,
        done: false
      })
    }
  },
  actions: {
    addTodo (context, newTodo) {
      setTimeout(() => {
        context.commit('addTodo', newTodo)
      }, 1000)
    }
  }
})

在上述示例中,我们使用了 Vuex 来管理 TodoList 应用的状态,包括 todos 列表及其状态,添加 Todo 的方法及其异步操作等。其中 store 包含了我们的状态、getters、mutations 和 actions,通过在 Vue 组件内调用 this.$store.state.xxxthis.$store.getters.xxx 等方法来访问状态。

总结

本文讲解了 Vuex 的核心概念及其应用,代码示例基于 Vue 单文件组件进行实现,让初学者能够更好的理解。同时,本文仅讲解了 Vuex 的入门内容,更进一步的内容需要进一步学习。

参考资源

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vuex 入门教程 - Python技术站

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

相关文章

  • 手拉手教你如何处理vue项目中的错误

    手拉手教你如何处理Vue项目中的错误 在开发Vue项目过程中,我们时常会遇到各种错误和异常情况。快速定位和解决问题有助于提高开发效率和代码健壮性,以下是处理Vue项目中出现错误的完整攻略。 1. 错误的分类 Vue项目中出现的错误大致可以分为些类型: 语法错误(Syntax errors) 运行时错误(Runtime errors),如传入无效数据,调用不存…

    Vue 2023年5月28日
    00
  • TypeScript 引用资源文件后提示找不到的异常处理技巧

    TypeScript 是一种强类型的 JavaScript 超集语言。在使用 TypeSript 进行开发时,我们有时会遇到引用资源文件后提示找不到的异常,这通常是因为在 TypeScript 中默认只会编译 .ts 文件,并不会编译其他类型的资源文件(比如 .json 或者 .png 文件)导致的。针对这种问题,我们可以使用以下技巧进行处理。 技巧一:使用…

    Vue 2023年5月28日
    00
  • 基于 vue-skeleton-webpack-plugin 的骨架屏实战

    让我来详细讲解“基于 vue-skeleton-webpack-plugin 的骨架屏实战”的完整攻略。 简介 随着客户端应用的普及以及前端性能要求的不断提高,页面骨架屏方案得到了广泛的应用。Vue.js 作为目前最受欢迎的前端框架之一,也有很多骨架屏方案可供选择。在这里,我们以 vue-skeleton-webpack-plugin 为例,介绍使用骨架屏实…

    Vue 2023年5月28日
    00
  • 详解Vue 路由组件传参的 8 种方式

    详解Vue 路由组件传参的 8 种方式 传参概述 在Vue中,路由传参是非常常见的需求,下面是详解Vue路由组件传参的8种方式。 方式一:params 通过动态路径参数进行传参,使用$route.params获取参数。 const router = new VueRouter({ routes: [ { path: ‘/user/:id’, componen…

    Vue 2023年5月28日
    00
  • 详解vue项目打包步骤

    下面是详解Vue项目打包步骤的完整攻略: 简介 在开发 Vue.js 项目的过程中,我们需要将代码打包并将它们部署到服务器上。Vue.js 提供了一些工具来帮助我们完成打包流程,并且支持多种打包方式,包括将整个项目打包成一个文件或将项目中的组件打包成单独的文件。 打包步骤 Vue.js 项目的打包流程大致分为以下几步: 1. 安装 Vue CLI Vue C…

    Vue 2023年5月28日
    00
  • 使用PDF.js渲染canvas实现预览pdf的效果示例

    PDF.js是一个由Mozilla开发的用于在浏览器中呈现PDF文件的JavaScript库。使用PDF.js可以实现在网页上直接预览PDF文件,而不需要使用插件或者其他额外的软件。下面是使用PDF.js渲染canvas实现预览pdf的效果示例的完整攻略: 步骤一:引入PDF.js 首先,在HTML文件中引入PDF.js文件。可以使用CDN来加速文件的加载,…

    Vue 2023年5月28日
    00
  • vue3.0翻牌数字组件使用方法详解

    题目中提到的“vue3.0翻牌数字组件使用方法详解”指的是一个基于Vue3实现的数字翻牌组件。该组件可以在网页中展示数字,当数字变化时,会以数字翻牌的方式呈现,非常炫酷。下面将详细讲解该组件的使用方法。 安装 首先,我们需要在项目中安装该组件。打开终端,输入以下命令: npm install vue3-flip-number –save 引入组件 安装完成…

    Vue 2023年5月28日
    00
  • vue3中ref和reactive的用法和解析(推荐)

    Vue3中ref和reactive的用法和解析 Vue3中的响应式系统 在Vue3中,响应式系统被重构为了更强大的API,并且与Vue2有很多不同之处。其中两个重要的API是ref和reactive。 ref是一个函数,用于将一个基本类型值或一个对象转换为响应式数据。而reactive则是一个函数,用于将一个对象转换为响应式数据。 使用ref 使用ref来创…

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