Vuex 入门教程

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中读取本地Json文件的方法

    当需要在Vue项目中读取本地的JSON文件时,可以使用 Vue.js 的 HTTP 客户端 Vue-resource 或者使用浏览器的原生 API fetch。 下面我将为您提供 Vue-resource 和 fetch 两种方法的使用详细攻略和示例。 一、使用Vue-resource获取本地JSON文件的方法 安装Vue-resource 首先需要在Vue…

    Vue 2023年5月28日
    00
  • vue 实现 tomato timer(蕃茄钟)实例讲解

    下面是详细讲解 “vue 实现 tomato timer(蕃茄钟)实例讲解”的完整攻略。 一、项目介绍 蕃茄钟是一种时间管理方法,采用对数目进行计数的方式来提高工作效率。本项目中我们将使用 Vue 来实现一个基础版的蕃茄钟。 二、项目结构 ├── App.vue ├── main.js ├── components │ ├── Timer.vue │ └──…

    Vue 2023年5月27日
    00
  • Vue实现双向绑定的原理以及响应式数据的方法

    Vue 实现数据的双向绑定可以分为以下几个步骤: 将模板中的指令和事件监听器转换成渲染函数; 在渲染函数中解析表达式,生成虚拟 DOM; 将虚拟 DOM 映射到真实的 DOM 并渲染到页面; 监听数据的变化,当数据发生变化时,重新生成虚拟 DOM,并且通过 diff 算法计算出真实 DOM 的最小更新范围,最后将更新的部分重新渲染到页面上。 Vue 实现数据…

    Vue 2023年5月29日
    00
  • 10分钟上手vue-cli 3.0 入门介绍

    10分钟上手vue-cli 3.0 入门介绍 什么是vue-cli 3.0 vue-cli是一套通过命令行工具帮助我们快速创建Vue.js项目开发环境的脚手架工具。其3.0版本带来了更好的用户体验和更快的构建速度。 安装vue-cli 3.0 首先,我们需要安装node.js和npm。安装完毕后,打开命令行窗口,输入以下命令进行全局安装vue-cli: np…

    Vue 2023年5月27日
    00
  • 解决axios:”timeout of 5000ms exceeded”超时的问题

    下面是解决axios请求超时问题的完整攻略: 问题描述 在使用axios发送请求时,可能会遇到如下提示:Error: timeout of {time}ms exceeded,这个提示表示请求超时了,请求时间超过了设定的时间限制。这个问题的产生可以是路由问题,也可以是服务器响应时间过长,也有可能是代理服务器的问题。 解决方案 方案一:增加超时时间的限制 在a…

    Vue 2023年5月28日
    00
  • vue data中的return使用方法示例

    下面我将为您讲解“Vue data中的return使用方法示例”的完整攻略。 1. Vue data中的return使用方法介绍 在Vue框架中,我们经常会用到data属性来存放组件中需要用到的数据。而在Vue的data中,我们可以使用return来返回一个对象或者函数,用于存放数据。 下面是一个基本的使用示例: data() { return { mess…

    Vue 2023年5月28日
    00
  • Vue组件生命周期运行原理解析

    Vue组件生命周期运行原理解析攻略 Vue.js是一款流行的JavaScript框架。组件是Vue.js的核心概念之一。Vue组件有自己的生命周期,Vue.js框架提供了一些回调函数接口,当组件的生命周期发生变化时,这些回调函数接口将会自动被触发。本篇攻略将详细介绍Vue组件生命周期的运行原理。 Vue组件生命周期介绍 Vue组件生命周期分为8个阶段: be…

    Vue 2023年5月29日
    00
  • vue组件watch属性实例讲解

    下面来详细讲解一下“Vue组件watch属性实例讲解”的完整攻略。 1. watch属性简介 在 Vue 组件中,watch 属性是用于监听数据变化并作出相应行为的一种功能。通俗的说,就是当我们需要对某个数据进行监听,并且当数据发生变化时,希望自动执行一些操作,那么就可以使用 watch 属性。 2. watch属性的基础使用 watch 属性的基础使用格式…

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