zoukankan      html  css  js  c++  java
  • 15-vuex

    一、初识vuex

    1、什么是vuex

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


    Vuex 采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化 ;

    vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能;


    2、状态管理

    什么是状态管理:

    简单理解:把需要多个组件共享的变量全部存储在一个对象里面,然后将这个对象放在顶层的 Vue 实例中,让其他组件可以使用,共享这个对象中的所有变量属性,并且是响应式的


    管理什么状态:

    • 用户的登录状态、用户名称、头像、地理位置信息等
    • 商品的收藏、购物车中的物品等


    单页面的状态管理:

    在单个组件中进行状态管理是一件非常简单的事情,如图:

    图片.png

    • State:状态(姑且可以当做是 data 中的属性)
    • View:视图层,可以针对 State 的变化,显示不同的信息
    • Actions:用户的各种操作:点击、输入等,会导致状态的改变


    单界面状态管理实现:

    image


    在这个案例中:

    • counter 需要某种方式被记录下来,也就是 State
    • counter 目前的值需要被显示在界面中,也就是我们的 View
    • 界面发生某些操作时(这里是用户的点击,也可以是用户的 input),需要去更新状态,也就是 Actions


    多界面状态管理:

    Vue 已经帮我们做好了单个界面的状态管理,但是如果是多个界面呢?


    多个视图都依赖同一个状态(一个状态改了,多个界面需要进行更新)


    全局单例模式(大管家)


    现在要做的就是将共享的状态抽取出来,交给大管家统一进行管理,之后每个试图按照规定进行访问和修改等操作,这就是 Vuex 的基本思想;


    Vuex 状态管理图例

    image


    3、vuex的基本使用

    (1)Chrome浏览器安装Vue.js devtools插件

    github地址:https://github.com/vuejs/vue-devtools/


    我在这里下载的:https://www.cr173.com/soft/1061360.html


    下载完成--解压--把vuejs-devtools.crx的后缀名改为zip然后再解压出来


    打开Chrome浏览器 >选择更多工具>扩展程序   >打开开发者模式

    点击”加载已解压的扩展程序”, 选择 vuejs-devtools533目录打开;

    image

    image


    (2)安装、使用vuex

    npm install vuex --save


    创建一个文件夹 store,并且在其中创建一个 index.js 文件;

    image


    storeindex.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    const store = new Vuex.Store({
      state: {
        counter: 0
      },
      mutations: {
        increment (state) {
          state.counter++
        },
        decrement (state) {
          state.counter--
        },
      }
    })
    
    export default store


    我们让所有的 Vue 组件都可以使用这个 store 对象,

    来到 main.js 文件,导入 store 对象,并且放在 new Vue 中:

    image


    此后,在其他 Vue 组件中,可以通过 this.$store 的方式,获取到 store 对象

    在APP组建中使用counter:

    <template>
      <div id="app">
        <h3>{{message}}</h3>
        <h3>当前计数:{{counter}}</h3>
        <button @click="increment">+</button>
        <button @click="decrement">-</button>
      </div>
    </template>
    
    <script>
    
    export default {
      name: 'App',
      data() {
        return {
          message: 'App组件',
        }
      },
      computed: {
        counter() {
          return this.$store.state.counter
        }
      },
      methods: {
        increment() {
          this.$store.commit('increment')
        },
        decrement() {
          this.$store.commit('decrement')
        }
      }
    }
    </script>
    
    <style>
    </style>


    (3)小结

    我们来对使用步骤,做一个简单的小节:

       提取出一个公共的store对象,用于保存在多个组件中共享的状态;

       将store对象放置在new Vue对象中,这样可以保证在所有的组件中都可以使用到;

       在其他组件中使用store对象中保存的状态即可:

           通过this.$store.state.属性的方式来访问状态;

           通过this.$store.commit('mutation中方法')来修改状态;


    注意事项:

    我们通过提交mutation的方式,而非直接改变store.state.count。

    这是因为Vuex可以更明确的追踪状态的变化,所以不要直接改变store.state.count的值。

  • 相关阅读:
    makeObjectsPerformSelector 方法的用法
    UISearchBar控件
    iOS应用崩溃日志分析
    IOS崩溃日志分析
    iOS 中捕获程序崩溃日志
    iOS疯狂详解之imageIO完成渐进加载图片
    iOS中nil,NULL,Nil,NSNull的区别
    IOS 8 UITableView cell lines不能靠左解决方法
    Android小玩意儿-- 从头开发一个正经的MusicPlayer(三)
    Android小玩意儿-- 从头开发一个正经的MusicPlayer(二)
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/13740570.html
Copyright © 2011-2022 走看看