vuex CDN

  1. <script src="xx.xxx.xxx"></script>

npm 安裝

  1. npm install vuex --save-dev
  2. // 全局引用 main.js
  3. import Vuex from 'vuex'
  4. Vue.use(Vuex)

Vuex依賴Promise。如果你支持的浏览器并没有实现 Promise (比如 IE),那么你可以使用一个 polyfill 的库,例如 es6-promise

你可以通过 CDN 将其引入:

  1. <script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script>

npm

  1. npm install es6-promise --save # npm
  2. yarn add es6-promise # Yarn
  1. import 'es6-promise/auto'

介绍

vuex是专门为vue.js应用程序开发的状态管理模式。

状态管理包含以下几个部分

  • state 驱动应用的数据源
  • view 以声明方式将state映射到视图
  • actions 响应在view上的用户输入导致的状态变化

注意: 使用外部store.js 需要在main.js中注入 或者在每个需要使用的组件中import 要不然就在main.js中写store的内容

读取state状态

store.js

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. const state = {
  5. count: 1
  6. }
  7. const mutations = {
  8. add: state => state.count += 1,
  9. reduce: state => state.count -= 1
  10. }
  11. export default new Vuex.Store({
  12. state, mutations
  13. })

计算属性 computed

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

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

  1. <template>
  2. <div class="hello">
  3. <p>{{count}}</p>
  4. </div>
  5. </template>
  6. <script>
  7. import store from '@/store/store.js'
  8. export default {
  9. name: 'HelloWorld',
  10. data () {
  11. return {
  12. }
  13. },
  14. computed:{
  15. count() {
  16. return store.state.count
  17. }
  18. }
  19. }
  20. </script>

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

  1. <template>
  2. <div class="hello">
  3. <p>{{$store.state.count}}</p>
  4. <button @click="$store.commit('add')">+</button>
  5. <button @click="$store.commit('reduce')">-</button>
  6. </div>
  7. </template>
  8. <script>
  9. import store from '@/store/store.js'
  10. export default {
  11. name: 'HelloWorld',
  12. data () {
  13. return {
  14. msg: 'Welcome to Your Vue.js App'
  15. }
  16. },
  17. store,
  18. mounted() {
  19. console.log(this.$store.state.count);
  20. }
  21. }
  22. </script>

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

mapState 辅助函数

必须得承认,我弄了1天,完完整整,很悲催 光看文是文档还是不明白 还得看大佬们的作业

mapState其实是简化了上面store的获取 将store的state挂载到this上 使用更方便 代码不冗杂

使用时直接获取count

第一种

  1. import { mapState } from 'vuex'
  2. export default {
  3. data () {},
  4. computed: mapState({
  5. count: state => state.count
  6. })
  7. }

第二种 对象展开运算符 ECMAScript6的方法

  1. import { mapState } from 'vuex'
  2. export default {
  3. data () {},
  4. computed: {
  5. ...mapState(['count'])
  6. }
  7. }

第三种

  1. import { mapState } from 'vuex'
  2. export default {
  3. data () {},
  4. computed: mapState(['count'])
  5. }

贴一下自己的代码

目录

开始 - 图1

main.js
开始 - 图2

store.js

开始 - 图3