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了,侵入性强。

     

  • 相关阅读:
    java的replace和replaceAll
    hibernate必须的包下载以及各个包的作用
    Jquery退出循环
    JQuery解析XML数据的几个例子
    使用ajax获取servelt数据乱码
    jquery绝对路径
    LeetCode 368. Largest Divisible Subset
    LeetCode 413. Arithmetic Slices
    LeetCode 474. Ones and Zeroes
    LeetCode 486. Predict the Winner
  • 原文地址:https://www.cnblogs.com/re-is-good/p/15163725.html
Copyright © 2011-2022 走看看