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组件入门知识全梳理

    Vue 组件入门知识全梳理 什么是 Vue 组件? 在 Vue 中,组件可以理解为独立的可复用的代码块,它可以将一些具有相同或类似功能的代码组织在一起,使其可以被反复使用。 组件具有自己的属性和行为,可以像 HTML 标签一样在模板中使用。每个组件都是一个独立的实例,因此可以用不同的参数和数据来渲染同一个组件。 创建组件 在 Vue 中,可以通过 Vue.c…

    Vue 2023年5月28日
    00
  • 基于vue 添加axios组件,解决post传参数为null的问题

    为了解决”post传参数为null的问题”,我们需要基于vue添加axios组件,并在axios中进行相关配置。具体的攻略步骤如下: 步骤1:安装axios 我们可以使用npm或yarn等工具来安装axios,具体的命令如下: npm install axios –save 或者: yarn add axios 步骤2:创建axios配置文件 在项目的sr…

    Vue 2023年5月28日
    00
  • vue中为何方法要写在methods的里面

    在Vue中,我们使用methods对象来存储Vue实例中的方法。之所以要将方法写在methods中,是因为Vue框架在初始化Vue实例时,需要遍历所有的data、computed、watch和methods,以及vue定义的生命周期钩子函数,以便进行响应式的绑定与更新。 在methods中定义的方法可以在Vue模板绑定中通过v-on指令进行调用,也可以通过V…

    Vue 2023年5月28日
    00
  • uni-app使用微信小程序云函数的步骤示例

    下面是uni-app使用微信小程序云函数的步骤示例的完整攻略: 1. 简介 uni-app是一款使用vue语法开发的跨平台开发框架,它能够一次编写多端代码(H5、小程序、App等),具有开发效率高、性能好、维护方便等优点。微信小程序云开发则是在微信小程序中提供了一个方便快捷的开发平台,其中之一就是云函数,它可以将服务器上的计算资源和代码在云端进行执行并返回结…

    Vue 2023年5月28日
    00
  • nodejs如何读取文件二进制 前端响应blob或base64显示图片

    一、读取文件二进制 在Node.js中,要读取文件二进制,可以使用Node.js内置的fs模块。可以通过调用fs.readFile方法来读取文件并将其保存到Buffer中,然后将其转换为二进制字符串。 以下是一个简单的示例: const fs = require(‘fs’); fs.readFile(‘./image.jpg’, (err, image) =…

    Vue 2023年5月28日
    00
  • Vue cli3 库模式搭建组件库并发布到 npm的流程

    下面是Vue cli3 库模式搭建组件库并发布到 npm的完整流程攻略。 1. 准备工作 1.1. 创建项目 首先,我们需要在本地创建一个 Vue 项目,可以通过 Vue CLI 3.x 提供的命令行工具来创建: vue create my-component-library 其中,my-component-library 为你的项目名称。 1.2. 配置项…

    Vue 2023年5月27日
    00
  • Vue 日期获取的示例代码

    下面是“Vue日期获取的示例代码”的完整攻略。 示例代码: <template> <div> <p>当前日期:{{ currentDate }}</p> <p>当前时间:{{ currentTime }}</p> </div> </template> <sc…

    Vue 2023年5月28日
    00
  • 解决ElementUI中tooltip出现无法显示的问题

    解决ElementUI中tooltip出现无法显示的问题 问题现象 在使用ElementUI的tooltip时,经常会出现tooltip无法显示的情况。鼠标悬停在元素上,但是tooltip并没有弹出来。这种问题通常是由于tooltip所依附的元素没有绑定事件导致的。 解决方法 方法一:使用v-tooltip指令 在使用ElementUI的tooltip时,我…

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