zoukankan      html  css  js  c++  java
  • Vuex

    Vuex

    vuex可以集中式管理所有组件的状态(singleton)

     

    Vue.use(Vuex)

    调用了Vuex对象的install方法,并给install方法传入Vue。

    用户可以通过applyMixin或者Minxin或者hook vue.prototype._init方法来获取到用户传入的options

    甚至添加一些方法等等。

     

     

    Vuex内部原理

    内部实例化了一个vue实例来实现响应式

    // 实际代码
    new Vuex.Store({
        state: {
            msg: 111
        }
    })
    
    
    // 内部操作
    new Vue({
        data: {
            $$state: { // 因为不需要将data代理到vue实例上,所有用了$
                msg: 111
            }
        }
    })

    至于getters也是通过vue中method来实现的

     

     

    如何修改vuex的状态

    1. 通过this.$store.state.xx = "changed"(非严格模式下)

    2. 通过mutation

     

     

    为什么推荐使用mutation来修改状态

    其实是为了更好的调试。在调用mutation方法时,vuex会记录之前的状态与修改之后的状态。(vue devTool插件)

     

     

    Vuex是怎么知道状态并非通过mutation来修改的?

    commit方法提交修改的时候会有个_iscommitting标记位。提交之前是true,提交完毕变成false。

    Vuex可以watch下state,如果state修改了,就看看标记位是不是true,不是的话,那么肯定是直接修改的state。

     

     

    如何得知action调用结束?

    可以在action里返回一个Promise。

     

    有些观点认为action都会提交mutation的,所以看看mutation是否被调用即可。

    我认为不妥,其一是mutation可能并非在action的最后一步调用。

    其二是观察mutation的函数是否被调用不太好实现。得hook了,侵入性强。

     

  • 相关阅读:
    下载文件c#
    系统蓝屏重起:如何修改设置,记录系统蓝屏重起的错误
    Repeater中的行数
    2010617 重装系统遇到的问题
    ajax 修改select的值 返回的值中有逗号
    GPS数据接收 串口调试感受
    Nios II实用之音频控制
    【笔记】VB控件MSComm功能介绍
    【摘】程序员版同桌的你
    AJAX Control Toolkit ——DragPanelExtender(拖拽面板)
  • 原文地址:https://www.cnblogs.com/re-is-good/p/15163725.html
Copyright © 2011-2022 走看看