美文网首页
「vue 组件通信二」vuex状态管理

「vue 组件通信二」vuex状态管理

作者: ybrelax | 来源:发表于2018-12-04 21:28 被阅读0次

前面一篇章介绍了组件的基本的通信,但是对于负责的项目来说还是略显单薄,所以今天再来介绍vue通信的另外一个重要角色 --- vuex
vuex 的存在主要是来解决非父子组件,兄弟组件所存在的缺陷。vuex主要的内容分为,state, mutations,actions, getters, modules

import Vue from 'vue';
import Vuex from 'vuex';
import mutations from './mutations'
import actions from './actions'
import getters from './getters'

Vue.use(Vuex);  //需要在这里注册然后才可以使用
const state = {
  count: 0,
  message: 'this is vuex'
}

export default new Vuex.Store({
  state,
  mutations,
  actions,
  getters
})

state

这个属性主要的作用就是用来存储vuex管理的实例

const state = {
  count: 0,
  message: 'this is vuex'
}

mutaitions

要知道状态管理的属性(state)只能用来读取,而不能进行进修修改,只能通过mutatiosns来对它进行操作
mutaitions 就是对状态管理的属性进行一些修改操作(变更状态)

  • 官方不建议把异步放这里 ( 如果异步操作了数据,组件在commit后,数据不能立即更新,而且不知道什么时候更新)
const mutations = {
  increment (state) {
    state.count++;
  }
}

export default mutations;

在vue中使用它

template:
      {{count}}
      <button @click = "increment"> 点我 +</button>
 computed: {
    count: function () {
      return this.$store.state.count
    }
  },
  methods: {
    increment () {
      this.$store.commit('increment') // 通过this.$store.commit方法来执行mutations
    }
  }

actions

actions和mutations很相似,不同在于action中可以提交mutations;
actions函数接收一个与store实例具有相同方法和属性的context对象; 因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。

  • 官方建议把异步放在这里进行处理 (个人感觉并没有特别的地方😆)
const actions = {
  incrementAction (context) {
    context.commit('increment');
  },

  asyncIncrement (context) {
    return new Promise(resolve => {
      setTimeout(() => {
        context.commit('increment');
        resolve();
      }, 1000);
    })
  }
}

export default actions;

如何去使用这个东西呢?

 incrementAction () {
      this.$store.dispatch('incrementAction')
    },
    asyncIncrementAction () {
      this.$store.dispatch('asyncIncrement').then(() => {
        console.log(this.$store.state.count);
      })
    }

getter

getters 和 vue 中的 computed 类似 , 都是用来计算 state 然后生成新的数据 ( 状态 ) 的。

export default {
 count (state, getters) { // 参数说明: arg1: state实例  arg2: 也可以是getters自身
   return state.count > 5 ? '傻瓜' : '很棒哦'
 }
}
countGetter: function () {
      return this.$store.getters.count
    }

modules

这个其实项目用得相对比较少,它是用来把store分割到不同的模块。但项目大的时候当个的store可能并不能满足业务需求,就有可能造成store过于庞大,所以就需要进行拆分,而modules正好可以派上用场。

const moduleA = {
  state: { ... },
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}

const moduleB = {
  state: { ... },
  mutations: { ... },
  actions: { ... }
}

const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

store.state.a // -> `moduleA`'s state
store.state.b // -> `moduleB`'s state
  • 最后
    对于vuex之前一直存在一个疑问,就是刷新之后的数据就不存在了,当然有解决办法
    就是配置本地存储一起使用eg: locationStorage/sessionStorage,但是本地存储了之后,为什么还要
    绕到vuex中去写?这根本就没必要啊,反而复杂了
    结论:
    vuex的作用,vuex主要用在父子组件通信或者子子组件间通信,如果不用vuex通信就得通过复杂的事件触发完成。
    只是用于这些组件通信使用。
    vuex 主要是负责通信的,而不是全局存储

相关文章

  • Vuex 状态管理

    Vue组件间通信方式 Vuex核心概念和基本使用 购物车案例 模拟实现vuex 一、组件内的状态管理流程 状态管理...

  • vue组件传值&vuex

    vue技术分享 目录 vue组件之间的通信 vue中数据监听watch的使用 vuex状态管理 vue-aweso...

  • Vuex简单上手

    Vuex Vuex是Vue.js应用的状态管理模式目前开发项目中,主要用于保存组件状态,保证兄弟组件间的通信。 首...

  • 「vue 组件通信二」vuex状态管理

    前面一篇章介绍了组件的基本的通信,但是对于负责的项目来说还是略显单薄,所以今天再来介绍vue通信的另外一个重要角色...

  • 学习笔记(十八)Vuex状态管理

    Vuex状态管理 组件状态管理及组件间通信回顾 状态管理 状态集中管理和分发,解决多个组件共享状态的问题 状态自管...

  • vuex的使用场景和基本用法

    一、vuex是什么?vuex是一个用来管理组件之间通信的插件,它是一个专为【vue.js】应用程序开发的状态管理模...

  • 创建单页应用

    Vue.js + Vue Router 创建单页应用, 使用vuex还管理组件间的通信。 State:存放组件之间...

  • vuex状态管理

    vue-cli开发中,多个组件间通信可以采用vuex状态管理,使多个实例共享一份数据 1.安装vuex npm i...

  • Vuex集中式状态管理

    目录 组件化 组件通信 状态管理 Vuex 是什么 Vuex 有什么特点 Vuex 解决了什么问题 什么类型的数据...

  • Vuex 2.0

    概念 Vuex 类似 Redux 的状态管理器,用来管理Vue的所有组件状态。 为什么使用Vuex? 当你打算开发...

网友评论

      本文标题:「vue 组件通信二」vuex状态管理

      本文链接:https://www.haomeiwen.com/subject/xoivcqtx.html