博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vuex
阅读量:4681 次
发布时间:2019-06-09

本文共 1657 字,大约阅读时间需要 5 分钟。

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

 

每一个 Vuex 应用的核心就是 store(仓库)。"store" 基本上就是一个容器,它包含着你的应用中大部分的状态(state)。Vuex 和单纯的全局对象有以下两点不同:

  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

  2. 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交(commit) mutations。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

npm install vuex --save

 

在一个模块化的打包系统中,您必须显式地通过 Vue.use() 来安装 Vuex:

import Vue from 'vue'import Vuex from 'vuex' Vue.use(Vuex)

 Vuex 之后,让我们来创建一个 store。创建过程直截了当——仅需要提供一个初始 state 对象和一些 mutations:

// 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex)
const store = new Vuex.Store({  state: {    count: 0  },  mutations: {    increment (state) {      state.count++    }  }})
 
 

在 Vue 组件中获得 Vuex 状态

那么我们如何在 Vue 组件中展示状态呢?由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在中返回某个状态:

// 创建一个 Counter 组件const Counter = {  template: `
{
{ count }}
`, computed: { count () { return store.state.count } }}

 

每当 store.state.count 变化的时候, 都会重新求取计算属性,并且触发更新相关联的 DOM。

然而,这种模式导致组件依赖的全局状态单例。在模块化的构建系统中,在每个需要使用 state 的组件中需要频繁地导入,并且在测试组件时需要模拟状态。

Vuex 通过 store 选项,提供了一种机制将状态从根组件『注入』到每一个子组件中(需调用 Vue.use(Vuex)):

const app = new Vue({  el: '#app',  // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件  store,  components: { Counter },  template: `    
`})

 

通过在根实例中注册 store 选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。让我们更新下 Counter 的实现:

const Counter = {  template: `
{
{ count }}
`, computed: { count () { return this.$store.state.count } }}

 

 

 

单一状态管理可以使用计算属性,当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键:

 

转载于:https://www.cnblogs.com/xiaofenguo/p/7159314.html

你可能感兴趣的文章
maven使用阿里镜像配置文件
查看>>
Java之字符流操作-复制文件
查看>>
你好,React setState
查看>>
JS简单表单验证
查看>>
C# 和 c++的语法不同点
查看>>
jquery blockUI 扩展插件 Dialog
查看>>
第一次去CSDN听课感受
查看>>
iOS开发UI篇—实现一个私人通讯录小应用(二)
查看>>
iOS开发UI篇—UITableview控件使用小结
查看>>
lesson1 预备知识
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
23 Java学习之RandomAccessFile
查看>>
SSH远程会话管理工具 - screen使用教程
查看>>
[翻译]WPF控件库 MaterialDesignInXamlToolkit (1)
查看>>
hibernate validation HV000030: No validator could be found for constraint
查看>>
前端优化
查看>>
bzoj1511 [POI2006]OKR-Periods of Words kmp+乱搞
查看>>
心语4
查看>>
Telink MESH SDK 如何使用PWM
查看>>