<script src="xx.xxx.xxx"></script>
npm 安裝
npm install vuex --save-dev// 全局引用 main.jsimport Vuex from 'vuex'Vue.use(Vuex)
Vuex依賴Promise。如果你支持的浏览器并没有实现 Promise (比如 IE),那么你可以使用一个 polyfill 的库,例如 es6-promise
你可以通过 CDN 将其引入:
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script>
npm
npm install es6-promise --save # npmyarn add es6-promise # Yarn
import 'es6-promise/auto'
介绍
vuex是专门为vue.js应用程序开发的状态管理模式。
状态管理包含以下几个部分
- state 驱动应用的数据源
- view 以声明方式将state映射到视图
- actions 响应在view上的用户输入导致的状态变化
注意: 使用外部store.js 需要在main.js中注入 或者在每个需要使用的组件中import 要不然就在main.js中写store的内容
读取state状态
store.js
import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const state = {count: 1}const mutations = {add: state => state.count += 1,reduce: state => state.count -= 1}export default new Vuex.Store({state, mutations})
计算属性 computed
每当 store.state.count 变化的时候, 都会重新求取计算属性,并且触发更新相关联的 DOM。
然而,这种模式导致组件依赖全局状态单例。在模块化的构建系统中,在每个需要使用 state 的组件中需要频繁地导入,并且在测试组件时需要模拟状态。
<template><div class="hello"><p>{{count}}</p></div></template><script>import store from '@/store/store.js'export default {name: 'HelloWorld',data () {return {}},computed:{count() {return store.state.count}}}</script>
Vuex 通过
store选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用Vue.use(Vuex)):
<template><div class="hello"><p>{{$store.state.count}}</p><button @click="$store.commit('add')">+</button><button @click="$store.commit('reduce')">-</button></div></template><script>import store from '@/store/store.js'export default {name: 'HelloWorld',data () {return {msg: 'Welcome to Your Vue.js App'}},store,mounted() {console.log(this.$store.state.count);}}</script>
通过在根实例中注册 store 选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。
mapState 辅助函数
必须得承认,我弄了1天,完完整整,很悲催 光看文是文档还是不明白 还得看大佬们的作业
mapState其实是简化了上面store的获取 将store的state挂载到this上 使用更方便 代码不冗杂
使用时直接获取count
第一种
import { mapState } from 'vuex'export default {data () {},computed: mapState({count: state => state.count})}
第二种 对象展开运算符 ECMAScript6的方法
import { mapState } from 'vuex'export default {data () {},computed: {...mapState(['count'])}}
第三种
import { mapState } from 'vuex'export default {data () {},computed: mapState(['count'])}
贴一下自己的代码
目录

main.js
store.js

