vuex

https://vuex.vuejs.org/zh/

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享。如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。如果您的应用够简单,最好不要使用Vuex。

使用Vuex管理数据优势:

  • 能够在vuex中集中管理共享的数据,便于开发和后期进行维护
  • 能够高效的实现组件之间的数据共享,提高开发效率
  • 存储在vuex中的数据是响应式的,当数据发生改变时,页面中的数据也会同步更新

4.2、vuex核心概念

vuex对象中通过state来存储状态,除了state以外还有用来操作state中数据的方法集,以及当我们需要对state中的数据需要加工的方法集等等成员。

成员列表:

  • state 存放状态  => mongodb/mysql
  • mutations state成员操作  model=》操作 增删改  同步操作
  • getters 加工state成员给外界 =》 查
  • actions 异步操作     =》 操作 增删改   ajax
  • modules 模块化状态管理

vuex工作流程

首先,Vue组件如果调用某个VueX的方法过程中需要向后端请求时或者说出现异步操作时,需要dispatch VueX中actions的方法,以保证数据的同步。可以说,action的存在就是为了让mutations中的方法能在异步操作中起作用。

如果没有异步操作,那么我们就可以直接在组件内提交状态中的Mutations中自己编写的方法来达成对state成员的操作。不建议在组件中直接对state中的成员进行操作,这是因为直接修改(例如:this.$store.state.name = 'hello')的话不能被VueDevtools所监控到。最后被修改后的state成员会被渲染到组件的原位置当中去。

使用vuex到项目

如果你在vue-cli创建项目时没有勾选vuex选项,则需要手动安装

cnpm i -S vuex

使用

src目录下面创建一个store目录

创建统一数据状态管理 在store里面创建index.js文件

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import {INCR_COUNT}from './constant'
export default new Vuex.Store({
  // 统一状态数据源 可以是所有的vue组件中的数据都可以存储在这里,当前此处只是一个临时,刷新就没有了
  // 数据源
  state:{
    count:100
  },
  // 类似于计算属性
  getters:{
    getCount(state){
      return state.count + '万(W)'
    }
  },
  // 同步处理的方法,它会直接操作state数据源
  mutations:{
    // 此处的名称要和commit参数1的名称要一致
    // 如果是一个变量,要想转为字符串,需要使用[]括起来就行了
    [INCR_COUNT](state,payload){
      state.count += payload
    }
  }
})

src/main.js中的对于new Vue实例与vuex状态进行关联

在store文件夹新建constant.js文件 在index中已经引入的文件

// 资产增长量
export const INCR_COUNT = 'incr2'

在组件中写入

<template>
  <div>
    <div>我的存款:{{ $store.getters.count }}</div>
    <hr>
    <Child></Child>
  </div>
</template>

<script>
import Child from './Child'
export default {
  components:{
    Child
  },
  data() {
    return {};
  },
  mounted() {
    
  },
};
</script>

在Child子组件

<template>
  <div>
    我是子组件:{{$store.getters.getCount}}
    <br>
    {{getCount}}
    <br>
    state:{{count}}
    <br>
    <button @click="incr">财产增加</button>
  </div>
</template>

<script>
import {INCR_COUNT}from '../../store/constant'
// 写在计算属性中
import {mapGetters,mapState} from 'vuex'

export default {
  data() {
    return {}
  },
  computed:{
    // 开始是这样写的
    /*
    ...mapGetters({
      getCount:"getCount"
    })
    可以简化成下面这个样子
    */
   ...mapGetters(['getCount']),
   ...mapState(['count'])
  },
  methods:{
    incr(){
      // 可以直接修改
      // this.$store.state.count = 200
      // 发送同步的命令,让全局状态修改
      // 参数1 命令名称
      // 参数2 命令传的参数,可选
      // this.$store.commit('ince')
      this.$store.commit(INCR_COUNT,100)
    }
  }
}
</script>
这样你在一个组件点财产增加另一个也会变
右侧打赏一下 代码改变世界一块二块也是爱
原文地址:https://www.cnblogs.com/ht955/p/14271478.html